|
1. állítás: A százalékos jel % wildcard előtag miatt az SQL lekérdezések leállítják az indexet, és helyette teljes táblázatszkennelést alkalmaznak. Ez az állítás népszerű A következtetés téved Valójában ez az állítás nem túl pontos. A wildcard % előtag rendkívül hatékonysá teszi az SQL indexkeresést, de a legtöbb esetben mégis az indexhez megy (nincs szükség teljes szöveges indexre, csak egy normál indexet építsenek). HOZZON LÉTRE NEM KLASZTEREZETT INDEXET [Ix_index NAME] [dbo]-N. [wkf_ Asztal neve]
( [db_title] ASC
) Végrehajtsd most VÁLASSZ TOP 10-et [db_id],[db_Summary],[db_AddDate],[db_title] FROM [könyvtár név]. [dbo]. [wkf_database] ahol [db_title]mint '%dba%' sorrend 1 leírással
A lekérdezési terv egyértelműen látható
Az összehasonlítás indexelése előtt:
Kivételként összetett lekérdezések A lekérdezésoptimalizáló elhagyhatja az indexet a teljes táblázatszkennelés javára. Ez nemcsak a LIKE '%kulcsszó%' esetében igaz, hanem a lekérdezések összetettségével is kapcsolatosak
2. állítás: A százalékos vadkártya előtagok indexet adnak SQL lekérdezéseknek, nem pedig indexek hiányára
Ez az állítás nagyon egyoldalú, és az index 99%-a csökkenti az IO-t és javítja a hatékonyságot az indexelés hiányához képest, de az index megtalálása után a kulcspárbajozás részben teljesítményigényes is. Ahogy a fenti két ábrán látható, ha a kulcsszavak könnyen összeilleszthetők, a teljes táblázat gyorsan megtalálja az adatokat, és az indexszkennelés nem spórolja meg elég időt, hogy pótolja a kulcspárosítás idejét (a legtöbb online lekérdezésnél ez a probléma nem fordul elő). Kezelés: 1. Ha nem érdekel, a plusz teljesítményfogyasztás nem túl nagy. És a különböző kulcsszavaknak eltérő fogyasztása van, de néhány kulcsszónak ez a problémája van, és figyelmen kívül hagyhatók 2. Jobb módszer, ha a körülmények engedik, hogy felülíró indexet (más néven INCLUDE indexet) építsünk. Alapfelvetés: a. A tárolóhely elegendő, b nem befolyásolja jelentősen a DML műveleteket, és c-nek nincs nagy mezője a felülírt indexben HOZZON LÉTRE NEM KLASZTEREZETT INDEXET [Ix_index NAME] [dbo]-N. [wkf_ Asztal neve]
( [db_title] ASC
) INCLUDE ( [db_id],[db_Summary],[db_AddDate]) Jelenleg a végrehajtási lekérdezési terv a következő, ami sokkal frissítőbb
A fentiek az, amit most az SQLSERVER feldolgozásához tudok képzelni, SELECT * FROM TABLENAME, mint '%Keyword %'
|