Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 11383|Válasz: 0

[Kommunikáció] SQL Server Kompozit Index Tanulás

[Linket másol]
Közzétéve 2015. 01. 29. 13:06:03 | | |

Áttekintés
Mi az egyetlen index, és mi az összetett index? Mikor kell új összetett indexet létrehozni, és mire kell figyelnem az összetett indexben? Ez a cikk főként néhány internetes beszélgetés összefoglalása.

Egy. Koncepció

Az egyetlen index olyan helyzet, amikor az index egy oszlopban van felsorolva, vagyis az új index létrehozásának állítása csak egy oszlopban van megvalósítva.

A felhasználók több oszlopon is létrehozhatnak indexeket, amelyeket összetett indexeknek (kombinált indexeknek) neveznek. Az összetett indexeket pontosan ugyanúgy hozták létre, mint az egyes indexeket. De az összetett indexek kevesebb többletterhelést igényelnek az adatbázis-műveletek során, és több egyedi indexet is kiválthatnak. Ha a táblázatban lévő sorok száma sokkal nagyobb, mint a billentyűk száma, ez a módszer jelentősen felgyorsíthatja a táblázat lekérdezési sebességét.

Két fogalom létezik egyszerre: szűk és széles indexek, a keskeny indexek 1-2 oszlopos indexeket jelölnek, és általában egyetlen indexre utalnak, hacsak nem más módon jelölik. A széles index olyan index, amely több mint 2 oszlopból áll.

Az indextervezés egyik fontos elve, hogy szűk indexeket használunk a széles indexek helyett, mert a szűk indexek általában hatékonyabbak, mint a kombinált indexek. A szűkebb indexek több választási lehetőséget adnak az optimalizálónak, ami gyakran javítja a teljesítményt.

Kettő. Használat

Hozz létre egy indexet
Hozd létre IDX1 indexet a table1-en (col1, col2, col3)  
Érdeklődik
válasszuk * az 1. táblázatból, ahol col1= A és col2= B és col3 = C

Jelenleg a lekérdezésoptimalizáló nem a táblát szkennelje, hanem közvetlenül az indexből veszi fel az adatokat, mert az indexben van ilyen adat, amit átfedő lekérdezésnek hívnak, és a lekérdezési sebesség nagyon gyors.   

Három. Megjegyzések:

1. Mikor kell vegyületindexet használni
A where feltételben a mezőt indexeljük, és ha több mezőt használnak, akkor összetett indexet alkalmazunk. Általában ne építs indexeket a kiválasztó mezőben (ha a mytable-ból szeretnél kiválasztani col1, col2, col3 lekérdezést, nincs szükség a fenti indexre). Az indexelés a feltételek alapján rendkívül fontos elv. Légy óvatos, hogy ne használj túl sok indexet, különben ez nagy hatással lesz a táblázatfrissítések hatékonyságára, mert sok időt kell az indexek létrehozására fordítani a táblázatok működtetésekor.

2. Kompozit indexek esetén, lekérdezés esetén a legjobb az indexek keresésének sorrendjét követni, amely a leghatékonyabb. Például:  
  IDX1:hozzon létre indexet idx1 táblán (col2,col3,col5)  
  válassz * az 1. táblázatból, ahol col2=A és col3=B és col5=D  

Ha "válassz * az 1-es táblázatból, ahol col3=B és col2=A és col5=D"
Vagy "válassz * az 1-es táblázatból, ahol col3=B" nem használja az indexet, vagy a hatás nem észrevehető

3. Egy összetett index helyettesíti az egyetlen indexet?
Sokan úgy gondolják, hogy bármely mező hozzáadása a klaszterezett indexhez javíthatja a lekérdezési sebességet, de sokan zavarosak: Ha a komplex klaszterelt indexmezőket külön lekérdezik, lelassul-e a lekérdezési sebesség? Ezzel a kérdéssel nézzük meg a következő lekérdezési sebességet (az eredmény 250 000 adatdarab), :( dátumoszlop Fariqi az összetett aggregációs index kezdő oszlopában az első helyen áll, a neibuyonghu felhasználónév pedig a második helyen)

IDX1:create   index   idx1   on   Tgongwen(fariqi,neibuyonghu)  

(1) Válassz Gid, Fariqi, Neibuyonghu címet Tgongwentől
hol Fariqi>'2004-5-5'

Lekérdezési sebesség: 2513 ms

(2) Válassz Gid, Fariqi, Neibuyonghu címet a Tgongwentől
ahol Fariqi>'2004-5-5' és neibuyonghu='hivatal'

Lekérdezési sebesség: 2516 ms

(3) Válasszon Gid, Fariqi, Neibuyonghu címet Tgongwentől
ahol neibuyonghu='hivatal'

Lekérdezési sebesség: 60280 milliszekundum

A fenti kísérletekből láthatjuk, hogy ha csak a klaszterezett index kezdőoszlopát használják lekérdezési feltételként, akkor az összetett klaszterelt indexszel rendelkező összes oszlop lekérdezési sebessége szinte ugyanaz, még valamivel gyorsabb, mint az összes összetett indexoszlop használata (ha a lekérdezési eredményhalmazok száma ugyanaz). Ha csak a összetett aggregált index nem kezdő oszlopait használják lekérdezési feltételekként, ez az index semmit sem fog tenni. Természetesen az 1. és 2. utasítások lekérdezési sebessége ugyanaz, mert a lekérdezésben lévő bejegyzések száma megegyezik; ha az összetett index összes oszlopát használják, és a lekérdezési eredmények kevések, akkor ez egy "index felülírást" alkot, így a teljesítmény optimalizálható. Ne feledd, hogy akár használsz más oszlopokat az aggregált indexben, akár nem, az első oszlopnak kell a leggyakrabban használni.

[Hivatkozás: Lekérdezésoptimalizálás és lapozási algoritmus séma http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Egyszerre kell létrehoznom egyetlen indexet és egy összetett indexet ugyanabban az oszlopban?
Kísérlet: Sysbase 5.0 tábla 1 mező: col1, col2, col3  

Tesztlépések:  
(1) Hozza létre az idx1 indexet az col1-en  
  Hajtsuk be a * select elemet az 1-es táblázatból, ahol col1=A idx1-et használ  
  Hajtsuk végre a select * gombot az 1-es táblázatból, ahol col1=A és col2=B szintén idx1-et használnak  

(2) Töröld az idx1 indexet, majd hozz létre egy idx2-t (col1,col2) összetett indexen  
  Mindkét lekérdezés idx2-t használ  

(3) Ha mindkét index, idx1 és idx2 létezik  
  Nem ott van, ahol col1='A' idx1-et használ; ahol col1=A és col2=B idx2-t használ.  
  Lekérdezésoptimalizálója az egyik korábban leggyakrabban használt indexet használja. Vagy használd az idx1-et, vagy idx2-t.  
   
Látható, hogy
(1) Egy táblázatnál, ha van összetett index (col1, col2) között, nincs szükség egyetlen indexet létrehozni az 1. col-on egyszerre.
(2) Ha a lekérdezési feltételek megkövetelik, hozzáadhatod a vegyet indexet (col1, col2) ponton, amikor már létezik egyetlen index az 1. col1-en, ami bizonyos mértékben javíthatja a hatékonyságot.
(3) Nincs különösebben sok előnye annak, ha egyszerre több mezőt (5 vagy 6 mezőt tartalmaz) összetett indexet állítunk fel, viszonylag nézve, több szűk mezővel rendelkező index létrehozása (amely csak egy, legfeljebb 2 mezőt tartalmaz) jobb hatékonyságot és rugalmasságot érhet el.



5. Le kell fednem a kérdést?
Általában nem érdemes olyan stratégiát alkalmazni, amely a teljes körű lekérdezési lefedettséget hangsúlyozza. Ha a Select záradék összes oszlopát felülírja egy nem klaszterezett index, az optimalizáló ezt felismeri, és jó teljesítményt nyújt. Ez azonban gyakran túl széles indexhez és túlzott támaszkodáshoz vezet, hogy az optimizátor mennyire használja a politikát. Általában szűk indexeket használnak nagyobb számú lekérdezéshez, ami nagyobb lekérdezéseknél jobb teljesítményt nyújt.




Előző:C# winform megakadályozza SQL injekciót
Következő:Dell Server hibakódok és megoldások 2013 kiadás
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com