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

Nézet: 12044|Válasz: 0

[Kommunikáció] Indexhasználati probléma, amikor a sqlserver például a '%keyword%' kezelést végzi

[Linket másol]
Közzétéve 2014. 11. 26. 15:52:19 | | | |

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 %'






Előző:SQLserver tranzakcióreplikáció új táblákat ad hozzá újraincializáció nélkül
Következő:Gyakorlati SQL állítás: dátumértékelé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