Avatar billede stephanryer Nybegynder
11. januar 2007 - 18:40 Der er 10 kommentarer og
1 løsning

Performance i forbindelse med LIKE

Jeg vil gerne høre, om det overhovedet kan betale sig at gøre felter til index, som der skal kunne søges på med LIKE.

Altså fx

SELECT * FROM person
WHERE navn LIKE '%smith%'

Hvis jeg har opfattet indeksering korrekt, vil det ikke have nogen betydning om "navn" er indekseret eller ej, når man søger på denne måde. Har jeg ret?

Og er der så andre måder man kan effektivisere denne søgning på?

Feltet vil typisk være en NVARCHAR med varierende størrelse.

På forhånd tak

Stephan
Avatar billede arne_v Ekspert
11. januar 2007 - 18:58 #1
ja

drop den foerste %

:-)
Avatar billede arne_v Ekspert
11. januar 2007 - 19:01 #2
i visse tilfaelde kan FULLTEXT vaere et alternativ
Avatar billede stephanryer Nybegynder
11. januar 2007 - 19:49 #3
jeg kan ikke bare droppe den først % :)

Og hvorfor kan fulltext være et alternativ?
Avatar billede arne_v Ekspert
11. januar 2007 - 19:54 #4
hvis det reelt er tale om at du soeger paa ord og at du soeger i laengere tekster
med mange ord, saa vil FULLTEXT vaere hurtigere

du kan ogsaa lave din egen FULLTEXT lignende loesning, hvis du har masser af
diskplads og behov for noget specielt
Avatar billede stephanryer Nybegynder
11. januar 2007 - 19:55 #5
Well det er ikke specielt lange tekster vi snakker om her. Måske 100-200 tegn. Og mange felter vil være under.
Avatar billede arne_v Ekspert
12. januar 2007 - 03:17 #6
jeg har aldrg brug FULLTEXT i SQLServer, så jeg ved ikke meget om det

du kunne bruge et par timer på at teste om det er brugbart for dig
Avatar billede stephanryer Nybegynder
12. januar 2007 - 06:58 #7
yes, well lige noget andet omkring indeksering så
Avatar billede stephanryer Nybegynder
12. januar 2007 - 07:00 #8
Er der automatisk indeksering på foreign keys? Jeg går ikke ud fra det, da de for mig virker som almindelige constraints, så vil det ikke altid være en fordel af lave indeksering på disse? (Non-clustered naturligvis)

Og er der forskel på effektiviteten i følgende sætning?:

SELECT * FROM x
JOIN y ON x.A = y.A
JOIN z ON z.B = x.B
WHERE y.C = 1

og

SELECT * FROM x
JOIN y ON x.A = y.A AND y.C = 1
JOIN z ON z.B = x.B
Avatar billede stephanryer Nybegynder
12. januar 2007 - 07:15 #9
Jeg beklager at jeg pludselig begynder at stille flere spørgsmål.

Læg et svar :)
Avatar billede arne_v Ekspert
12. januar 2007 - 15:06 #10
jeg mener ikke at der er index paa foreign keys (men slaa op i docs - du ved godt
at SQLServers docs kan downlodes fra MS ?)

set ud fra et generelt SQL synsvinkel er der ikke grund til at tro at den ene er
mer effektiv end den anden, men for din speciefikke SQLServer version kan der
godt vaere forskel - du kan bede SQLServer lave en execution plan for de 2 og
studere resultatet (husk at have de rigtige data maengder)

og svar
Avatar billede stephanryer Nybegynder
12. januar 2007 - 15:47 #11
tusind tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester