22. juli 2008 - 11:14Der er
13 kommentarer og 1 løsning
server anvender ikke Index
Hej
Jeg skal i den nærmeste fremtid til at oprette en database hvor den en tabel kommer til at indeholde ca 45 mill records. Jeg har nu oprettet en test tabel med 40mill + records . På denne tabel har jeg oprettet to index. 1 på et autonum felt. 2 på et søge felt.
Når jeg laver en forspørgsel med et kriterie på søge feltet anvender sql serveren ikke mit 2. index. Hvorfor gør den ikke det. Der er over 1 min i forskel hvis den anvende det.
Er du sikker på at du har lavet 2 index, og ikke 1 index med 2 kolonner? Hvis det er tilfældet, kan du ikke bruge indexet på søgefeltet, uden også at specificere autonum feltet.
Ved du ca. hvor mange rækker der matcher fkeyid'et 8882?
Da din sum-udregning beregner summen på en anden kolonne (subtotal), som ikke findes i dit index, så skal den for hver række i dit fkeyid-index lave et lookup i det clustered index, og det kan være derfor den vælger at lave et scan, hvis den vurderer at antal rækker med fkeyid 8882 er forholdsvist stort. Hvis du i stedet laver dit nonclustered index sådan her, så slipper du for lookup'et i dit clustered index, men det vil gøre index'et en smule større:
create nonclustered index IX_test on test (fkeyid) include (subtotal)
Dette virker dog vist kun på sql 2005 så vidt jeg husker.
koontz2 => statistikkerne er vigtige. Læs mere here om hvordan du opdaterer dem. Der kommer en lille reklame først, men der heldigvis et link til at skippe reklamen.... http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1278729,00.html#
-->gnoname den anvender heller ikke indexet når jeg køre din query med subquery. Nej du har ret det gør da ingen ting at hinte optimizeren men jeg var bare lidt rystet over at den ikke anvendte et index der så tydelig kunne optimere queryen.
-->sjang du har sikkert ret i at det er fordi der er relativt mange rækker med 8882 ca 120000 At oprette et index med subtotal løser ikke mit problem da det kun var til min test, men det var jo ikke nemt at vide.
-->teepee Jeg har opdateret statistikkerne og udtrækket køre nu perfekt uden hint til indexet.
Tak for hjælpen til alle.
Jeg vil dele point mellem teepee og sjang hvis det er ok. Begrundelsen er at sjang næsten helt sikkert har givet årsagen og teepee løsningen, håber det er ok. smide i et svar ?
hmm troede man kunne dele points...sjang opretter en til dig
Synes godt om
Ny brugerNybegynder
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.