webForumDet fria alternativet

Går det att få "like" snabbt

Databaser & SQL

4 svar · 283 visningar · startad av suecochilango

Medlem sedan jan. 200311 inlägg
Frågan#1

Jag behöver göra en join på två tabeller om ett textfält i tabell A är "like" ett textfält i tabell B, och tvärtom. Alltså:

select ... from a, b where
(a.fält like '%' || b.fält) OR (b.fält like '%' || a.fält)

Det är fult, det är tungt, det tar tid. Använder en materialiserad vy för att snabba upp min sökning, men då återstår givetvis problemet att det tar tid att refresha min vy.

Är det någon som vet ett mer effektivt sätt att göra det jag vill? Jag är ingen SQL-guru så jag kanske har komplicerat saker i onödan.

Medlem sedan dec. 200012 464 inlägg
#2

En likesökning med inledande % går aldrig att få snabb.

Hur ser ditt data ut och under vilka villkor betraktas kolumnerna som lika?

Medlem sedan nov. 2003569 inlägg
#3

har du indexerat tabellen?

Medlem sedan jan. 200311 inlägg
#4

Jag behöver jämföra två uppsättningar av varor, om varunummren är lika på sättet jag beskrev så räknas varorna som lika (eller rättare sagt, föreslås som lika för användaren, men det är en annan historia). Varunummren som jämförs är VARCHAR2(64) fält.

Indexering borde så vitt jag vet inte hjälpa alls i detta fall, jag söker ju inte på ett sätt som kan använda index på ett vettigt sätt. Men visst, jag har indexerat tabellerna, det är ju relativt billigt.

Medlem sedan nov. 2003569 inlägg
#5

Använd CHAR , jag testade precis VARCHAR och CHAR.
VARCHAR är långsammare än CHAR.

261 ms totalt · 3 externa anrop · v20260731065814-full.767b4345
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)