Avatar billede stoney96 Nybegynder
06. januar 2004 - 09:53 Der er 5 kommentarer og
1 løsning

Select hurtigere med 'where'-klausul ?

Kan nogen forklare mig dette.

Jeg har en tabel og når jeg søger således:

select top 50 * from logbog order by dato desc

- går det væsenligt langsommere end hvis jeg har dette where klausul på:

select top 50 * from logbog where operator='z' order by dato desc

Der er index på feltet 'dato'
Avatar billede overchord Nybegynder
06. januar 2004 - 09:58 #1
Det er vel fordi du reducerer data-maengden (operator = 'z' fremfor alle vaerdier)
Avatar billede trer Nybegynder
06. januar 2004 - 10:30 #2
Når du bruger TOP så skærer du af i de viste rækker, ikke i antal fremfundne rækker.
Avatar billede trer Nybegynder
06. januar 2004 - 20:39 #3
Uddyber lige (har tid nu :-)

... med en WHERE betingelse afgrænser du dit udtræk til de få rækker der matcher dit datasæt. Er der yderligere et indeks der matcher din where betingelse (helt eller delvist) vil du få en ekstremt effektiv query. Sorteringen sker derfor kun på de fundne rækker.

En TOP X er derimod en afgrænsning af visning. Dvs din select trækker samtlige data ud, derefter sorteres de og slutteligt tager du de 50 første rækker. Du har altså betalt prisen for at finde samtlige rækker og sortere dem, men bruger altså kun 50 rækker.

Hvis du kan regne ud hvor lang tid man typisk er om at få 50 rækker ud, så kan du forbedre performance ved at kombinere din TOP 50 med en dato-afgrænsing. Fx. hvis man typisk er 10 dage om at få 50 rækker i loggen, så laver du et udtryk som dette

select top 50 * from logbog where dato>now-20 order by dato desc

Bemærk at jeg trækker 20 dage fra now - dermed har man en sikkerhedsmargen ifht dato-afgrænsningen, men udtrækket og sorteringen laver du væsentligt mindre end når hele datasættet skal gennemgås.
Avatar billede stoney96 Nybegynder
09. januar 2004 - 14:16 #4
Til trer:
Trykkede galt da points skulle deles ud. Hvis du er på, så opretter jeg et dummyspørgsmål med points til dig.
Avatar billede trer Nybegynder
09. januar 2004 - 14:23 #5
ok - jeg afventer et spm med teksten "Points til trer" (eller noget i den stil) i den her kategori.

Mvh
Troels
Avatar billede overchord Nybegynder
09. januar 2004 - 19:56 #6
ok - hvis du foeler at mit svar ikke var fyldestgoerende nok giver jeg gerne pointene tilbage - poster spm med "Point til stoney96" i Access kategorien
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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