Ar trebui să creez un index non-grupat pe toate coloanele care pot fi căutate sau doar pe fiecare coloană separat?
On februarie 15, 2021 by adminNu sunt sigur că voi folosi corect indici non-grupați. Estimatorul planului SSMS a spus să adauge un alt index când următorul index era deja pe masă.
CREATE NONCLUSTERED INDEX [ix_zone_fetch_shipping] ON [dbo].[tbl_shipping_rates_zones] ( [iso] ASC, [mzone] ASC, [postal] ASC ) INCLUDE ( [region], [zone_dom], [zone_emi], [zone_pmi], [zone_fci], [zone_ups], [zone_fed] )
Interogarea mea a fost
SELECT * FROM tbl_shipping_rates_zones WHERE postal = "10001"
Întrebarea mea este … ar trebui să creez un index pentru toate tastele posibile de căutare? Caut după mzone, iso și poștal în diferite interogări.
Mulțumesc
Comentarii
- Includeți fiecare coloană din tabelul?
- Da, includ fiecare coloană.
- Includerea tuturor coloanelor într-un singur index nu va ajuta prea mult – un astfel de index, în primul rând, dublează cerințele de spațiu, și în al doilea rând, poate fi folosit doar pentru cele mai multe coloane din stânga – NU simplifică în mod magic căutarea celei de-a 17-a coloane din tabelul dvs. mai rapid.
- Și având o indexul separat pentru fiecare coloană – doar pentru că s-ar putea căuta într-o zi – nu este, de asemenea, foarte bun. Un index vă costă – în termeni de performanță la fiecare inserare, actualizare, ștergere. Nu ' t overindex – că ' este aproape mai rău decât să nu ai deloc indici ….
- Vă mulțumim pentru acele comentarii @marc_s, aceasta este exact informația pe care o căutam. De asemenea, este potrivit să spunem că există o gamă bună de indici ne-grupați (între 5-10, de exemplu) sau este pur relativă la nevoile tabelului? Dacă da, la ce fel de lucruri este relativ?
Răspuns
SQL Server vă va arăta un Index ar dori să se folosească, deoarece estimează că acest indice ar face viața mai ușoară. Cu siguranță nu este nevoie să creați un index pe fiecare câmp de căutare, de fapt, acest lucru va face ca performanța de scriere să fie mult mai proastă. Dacă aveți mai puțin de 5 până la 10 indici pe tabelul dat și executați interogarea permanentă, probabil că doriți să adăugați indexul sugerat exact așa cum îl arată SSMS.
JNK” s Editează mai jos
De asemenea, este important să analizăm împreună indexurile sugerate. Sugestiile sunt toate în silozuri, ca să spunem așa, astfel încât un întreg index sugerat ar putea fi înlocuit prin adăugarea unui câmp INCULDE
d pe un alt index.
De exemplu, este posibil să aveți sugestii pentru acești doi indici:
CREATE INDEX ix_IndexA ON Table (ColA, ColB) CREATE INDEX ix_IndexB ON Table (ColA) INCLUDE (ColC)
Când, de fapt, ați putea satisface nevoile ambelor cu:
CREATE INDEX ix_IndexC ON Table (ColA, ColB) INCLUDE (ColC)
Am văzut acest lucru cu indexuri mult mai complicate (10-20 câmpuri cheie, 10-20 câmpuri incluse) în care adăugarea unui câmp la INCLUDE
lista va elimina necesitatea celui de-al doilea index.
Comentarii
- @MaxVernon: citiți Stairway to SQL Server Indexing – Partea 1, Introducere în indexuri și apoi restul articolelor din serie – acoperă aproape totul despre indexurile SQL Server, de la introducere la subiecte avansate
- @MaxVernon: sau consultați Index de acoperire folosind Coloane incluse pentru o discuție despre coloanele incluse un index " care acoperă "
Răspuns
Motivul pentru care vă spune să creați un nou index este pentru că cel pe care îl aveți nu este cel mai optim posibil. Optimizatorul de interogare este destul de selectiv în ceea ce privește modul în care alege indexul de utilizat, următorul link ar trebui să vă ajute să înțelegeți selectivitatea:
http://blogs.msdn.com/b/bartd/archive/2011/01/25/query_5f00_tuning_5f00_key_5f00_terms.aspx
Ați spus mai sus că ați inclus toate coloanele în index – duplicând în esență datele tabelului. Pe această bază, care ar fi rău în crearea a 3 indexuri separate pe coloanele pe care le menționați? Spațiul folosit ar fi mai mic și viteza ar fi mult mai rapidă. Aș risca să presupun că asta vă spune DTA / planul de execuție – doar într-un mod diferit.
Uită-te la detaliile planului de execuție generate de interogare pentru a identifica unde sunt gâturile sticlei și folosește-le ca un ghid cu privire la modul de proiectare a indexurilor. SQL Server este destul de bun în a ști ce este mai bine – aveți încredere în ceea ce vă spune.
Sper că acest lucru vă va ajuta.
Lasă un răspuns