Pitäisikö minun luoda ryhmittelemätön hakemisto kaikkiin haettavissa oleviin sarakkeisiin vai vain jokaiseen sarakkeeseen erikseen?
On helmikuu 15, 2021 by adminEn ole varma, että käytät ryhmittymättömiä hakemistoja oikein. SSMS-suunnitelman estimaattori sanoi lisäävänsä uuden indeksin, kun seuraava hakemisto oli jo taulukossa.
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] )
Kyselyni oli
SELECT * FROM tbl_shipping_rates_zones WHERE postal = "10001"
Kysymykseni on … pitäisikö minun luoda hakemisto kaikille mahdollisille hakunäppäimille? Etsin mzone-, iso- ja postikohtaisesti eri kyselyissä.
Kiitos
Kommentit
- Lisätkö kaikki sarakkeet taulukko?
- Kyllä, sisällytän kaikki sarakkeet.
- Kaikkien sarakkeiden sisällyttäminen yhteen hakemistoon ei auta paljoakaan – tällainen indeksi ensinnäkin kaksinkertaistaa tilavaatimukset, ja toiseksi sitä voidaan koskaan käyttää vain n vasemmalla olevaan sarakkeeseen – se EI vain taianomaisesti nopeuttaa taulukon 17. sarakkeen etsimistä.
- Ja erillinen hakemisto jokaiselle sarakkeelle – vain siksi, että saatat etsiä sitä jonain päivänä – ei myöskään ole kovin hyvä. Hakemisto maksaa sinulle – jokaisen lisäyksen, päivityksen, poiston suorituskyvyn kannalta. Älä ' t overindex – että ' on melkein huonompi kuin jos hakemistoja ei ole lainkaan …
- Kiitos kommenteista @marc_s, juuri sitä tietoa etsin. Onko myös tarkoituksenmukaista sanoa, että meillä on hyvä valikoima ryhmittymättömiä indeksejä (esimerkiksi 5-10 välillä) vai onko se puhtaasti taulukon tarpeisiin nähden? Jos on, mihin asioihin se liittyy?
Vastaa
SQL Server näyttää hakemiston sitä haluaisi käyttää, koska sen mukaan indeksi helpottaisi elämää. Hakemista ei tarvitse luoda jokaiselle etsittävälle kentälle, sillä se tekee kirjoituksen suorituskyvystä huomattavasti huonomman. Jos annetussa taulukossa on vähemmän kuin sanottu 5-10 hakemistoa ja suoritat kyseisen kyselyn koko ajan, haluat todennäköisesti lisätä ehdotetun indeksin täsmälleen samalla tavalla kuin SSMS näyttää sen.
JNK: n muokkaus alla
On myös tärkeää tarkastella ehdotettuja hakemistoja yhdessä. Ehdotukset ovat kaikki niin sanottuina siiloissa, joten yksi ehdotettu hakemisto voidaan korvata lisäämällä INCULDE
d -kenttä toiseen hakemistoon.
Esimerkiksi näille kahdelle hakemistolle voi olla ehdotuksia:
CREATE INDEX ix_IndexA ON Table (ColA, ColB) CREATE INDEX ix_IndexB ON Table (ColA) INCLUDE (ColC)
Vaikka itse asiassa voisit vastata molempien tarpeisiin:
CREATE INDEX ix_IndexC ON Table (ColA, ColB) INCLUDE (ColC)
Olen nähnyt tämän paljon monimutkaisemmilla hakemistoilla (10-20 avainkenttää, 10-20 mukana olevaa kenttää), joissa yksi kenttä lisätään INCLUDE
-luettelo poistaa toisen hakemiston tarpeen.
Kommentit
- @MaxVernon: lue Stairway to SQL Server Indexing – Part 1, Introduction to Indexes ja sitten muut sarjan artikkelit – kattaa melkein kaiken SQL Server -indekseistä introsta edistyneisiin aiheisiin
- @MaxVernon: tai katso Hakemiston peittäminen mukana olevien sarakkeiden avulla keskustellaksesi mukana olevista sarakkeista e hakemisto ", joka kattaa "
vastaus
Syy, miksi se kehottaa sinua luomaan uuden hakemiston, johtuu siitä, että hakemuksesi ei ole paras mahdollinen. Kyselyn optimoija on melko valikoiva siinä mielessä, miten se valitsee käytettävän hakemiston, seuraavan linkin pitäisi auttaa sinua ymmärtämään valikoivuutta:
http://blogs.msdn.com/b/bartd/archive/2011/01/25/query_5f00_tuning_5f00_key_5f00_terms.aspx
Sanoit edellä, että olet sisällyttänyt kaikki hakemiston sarakkeet – pääosin kopioinut taulukon tietoja. Mikä olisi tältä pohjalta haittaa 3 erillisen hakemiston luomiselle mainitsemillesi sarakkeille? Käytetty tila olisi vähemmän ja nopeus olisi paljon nopeampi. Vaaraisin arvailla, että tämä on mitä DTA / toteutussuunnitelma kertoo sinulle – aivan eri tavalla.
Tarkastele kyselyn tuottamia toteutussuunnitelman yksityiskohtia pullonkaulojen sijainnin selvittämiseksi ja käytä sitä ohjeena hakemistojen suunnittelussa. SQL Server osaa melko hyvin tietää, mikä on parasta – luota siihen, mitä se kertoo sinulle.
Toivottavasti tämä auttaa sinua.
Vastaa