Tudd Intuíció, előadás, javítása lekérdezési teljesítmény
Használata amely indexek
Nem mindig szükséges használni nem fürtözött indexek SQL Server a második szakaszban eltávolított egy teljes sort. Ez a helyzet akkor fordul elő, amikor egy nem fürtözött index tartalmazza az összes adatot a táblázatban azt szeretné, hogy az SQL Server a művelet végrehajtásához. Amikor ez megtörténik, akkor hívja az index burkolat, hiszen ez a mutató magában foglalja az egész kérés. Amely indexek is jelentősen növeli a teljesítményt a lekérdezés; Ez jól látható a két lekérdezés tervek az előző példában. A költség az ilyen lekérdezések szereplők, akik abból a kívánt adatsort 97% -a az összes lekérdezés költsége. Más szóval, a kérés nélkül ezt a műveletet végrehajtó 32-szer gyorsabb. Lássuk, hogyan indexek munka.
Alkalmazza motivációs index
- Indítsa el az SQL Server Management Studio, nyitott az új lekérdezés ablak (New Query), és módosítsa az adatbázist az összefüggésben az Adventure Works.
- Az az elképzelés, amely indexek is, hogy azok a szükséges adatokat vizsgálatok elvégzésére. Ha megnézzük az első ilyen kérelmeket, amelyek már használják az előző példában, azt látjuk, hogy az SQL Server szükséges oszlopok SalesOrderID. CarrierTrackingNumber és ProductID.
Nem fürtözött index NCLIX_OrderDetails_ProductID. hoztuk létre korábban, magában foglalja a ProductID oszlopot. mert épül ez az oszlop, és az oszlop SalesOrderID. mert ez az oszlop a kulcs oszlop a fürtözött index. Ezért SalesOrderID egy mutató, hogy az SQL Server egy nem fürtözött index. Következésképpen, a szerver SQL Server, hogy CarrierTrackingNumber. Vissza kell térnünk adatsort keres (keresik módszer) csak a fürtözött index. A második lekérdezés oszlop CarrierTrackingNumber nem a SELECT listában. Írja be és kövesse az utasításokat, beleértve a tényleges megvalósítás a terv, hogy a különbséget. A kód a példához áll a mintában fájlok használata Jelen Indexes.sql.
Az alábbi ábra azt mutatja, hogy az SQL Server kiszolgálót a második lekérdezés kell látni a fürtözött index, mert az index magában foglalja a lekérdezés, ha CarrierTrackingNumber oszlop nincs bejelölve. Mivel a hozzáférést a fürtözött index minden sorban nagyon drága, a második kérelem csak 1% -a teljes költség a csomag. Nézzük az Üzenetek fülön (Üzenetek), azt látjuk, hogy a sorrendben. hogy fedezze a kérelmet, az SQL Server kell csak elvégezni az olvasási 2. oldal (helyett 709 leolvasás szükséges az első kérelem).
Azt láttuk, hogy a vonatkozó index adhat nagy nyereség a végrehajtási sebesség. Természetesen, ha nem tudja eltávolítani oszlopokat a lekérdezés, ha szükség van rájuk, mint eredményt. De az általános szabályt kell letölteni: csupán az oszlopokat, hogy tényleg szükség annak érdekében, hogy nagyobb valószínűséggel használják motivációs index. Nem szabad használni a SELECT, a csillaggal (*) csak azért, mert könnyebb a kérelmet.
Nézzük a végrehajtási tervet, azt találjuk, hogy a hozzáférést a fürtözött index már nincs szükség. Az Üzenetek fülön, akkor egyértelmű, hogy el tudja végezni ezt kérés most szükség csak 5 oldalt olvas, míg korábban szükséges 709.
Megjegyzés. Tartalmazza oszlopok oka a túlterhelés az SQL Server, ha az adatok a változásokat, mert az SQL Server kell változtatni minden index, és azért is, mert azok tárolására helyre van szüksége az adatfájlokat. Következésképpen a felvétele oszlopok nem fürtözött indexek - ez egy jó módja annak, hogy javítsa a lekérdezési teljesítmény, de nem hozhatnak létre indexet tartalmazza oszlopok valamennyi kérelmet az alkalmazás. Ezt a funkciót csak akkor kell használni, hogy végrehajtásának felgyorsítása probléma lekérdezések.
Indexek számítjuk oszlopok
A dbo.OrderDetails táblázatban már számított oszlop LineTotal. amely LineTotal értéke a sorban, és úgy számítjuk ki, a következő képlet: