Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 12044|Odpoveď: 0

[Komunikácia] Problém s využitím indexu, keď sqlserver spracováva napríklad '%keyword%'

[Kopírovať odkaz]
Zverejnené 26. 11. 2014 15:52:19 | | | |

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






Predchádzajúci:Replikácia transakcií SQL Server pridáva nové tabuľky bez reinicializácie
Budúci:Praktické SQL vyhlásenie: odhad dátumu
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com