|
Výrok 1: Prefix žolíka percentuálneho znaku % spôsobí, že SQL dotazy zastavia index a namiesto toho použijú úplné skenovanie tabuliek. Toto tvrdenie je populárne Záver je nesprávny V skutočnosti toto tvrdenie nie je veľmi presné. Predpona wildcard % urobí vyhľadávanie indexov v SQL mimoriadne efektívnym, ale vo väčšine prípadov stále pôjde do indexu (nie je potrebný žiadny plnotextový index, stačí vytvoriť normálny index) VYTVORTE NEKLASTROVANÝ INDEX [Ix_index NÁZOV] NA [dbo]. [wkf_ Názov stola]
( [db_title] ASC
) Vykonať v tomto čase VYBERTE top 10 [db_id],[db_Summary],[db_AddDate],[db_title] Z [názov knižnice]. [dbo]. [wkf_database] kde [db_title] ako '%dba%' zoradil podľa 1 desc
Plán dotazu je jasne zobrazený
Pred indexovaním porovnania:
Výnimkou sú zložité dotazy Optimalizátor dotazov môže opustiť index v prospech úplného skenovania tabuliek. Toto neplatí len pre LIKE '%keyword%', ale súvisí aj so zložitosťou dotazu
Tvrdenie 2: Percentuálne % wildcard prefixy spôsobia, že SQL dotazy budú indexovať namiesto žiadneho indexu
Toto tvrdenie je veľmi jednostranné a 99 % indexu zníži IO a zlepší efektivitu v porovnaní s neindexovaním, ale kľúčová párová akcia po nájdení indexu je tiež čiastočne výkonnostne náročná. Ako je znázornené na dvoch obrázkoch vyššie, ak sú kľúčové slová ľahko spárované, kompletné skenovanie tabuľky rýchlo nájde dáta a indexové skenovanie neušetrí dostatok času na vykompenzovanie času potrebného na akciu zhody kľúčov (väčšina online dotazov tento problém nemá). Liečba: 1. Ak vám na tom nezáleží, zvýšená spotreba výkonu nie je veľmi veľká. A rôzne kľúčové slová majú rôznu spotrebu, ale niektoré majú tento problém a dajú sa ignorovať 2. Lepším spôsobom je vytvoriť override index (známy aj ako INCLUDE index), ak to podmienky umožňujú. Predpoklad: a. Úložný priestor je dostatočný, b nemá významný vplyv na DML operácie a c nemá veľké polia v prepísanom indexe VYTVORTE NEKLASTROVANÝ INDEX [Ix_index NÁZOV] NA [dbo]. [wkf_ Názov stola]
( [db_title] ASC
) INCLUDE ( [db_id],[db_Summary],[db_AddDate]) V súčasnosti je plán vykonávania dotazov nasledovný, čo je oveľa osviežujúcejšie
Vyššie uvedené je to, čo mi teraz napadá pri spracovaní SQLSERVER SELECT * FROM TABLENAME, napríklad '%Keyword %'
|