Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 12044|Odpověď: 0

[Komunikace] Problém s využitím indexu, když sqlserver zpracovává například '%keyword%'

[Kopírovat odkaz]
Zveřejněno 26.11.2014 15:52:19 | | | |

Tvrzení 1: Prefix žolíku procentního znaménka % způsobí, že SQL dotazy zastaví index a místo toho použijí kompletní skenování tabulek. Toto tvrzení je populární

Závěr je chybný

Ve skutečnosti toto tvrzení není příliš přesné. Předpona wildcard % udělá SQL vyhledávání indexů extrémně efektivním, ale ve většině případů stále půjde na index (není potřeba žádný plnotextový index, stačí vytvořit normální index).

VYTVOŘTE NESHLUKOVANÝ INDEX [Ix_index NÁZEV] NA [dbo]. [wkf_ Název stolu]
(
[db_title]  ASC
)

Vykonájte v tuto chvíli

VYBERTE top 10 [db_id], [db_Summary],[db_AddDate],[db_title] Z [název knihovny]. [dbo]. [wkf_database], kde [db_title]například '%dba%' pořadí podle 1 desc

Plán dotazu je jasně zobrazen

Před indexováním porovnání:


Jako výjimku jsou složité dotazy Optimalizátor dotazů může opustit index ve prospěch úplného skenování tabulek. To neplatí jen pro LIKE '%klíčové slovo%', ale také souvisí s komplexností dotazu




Tvrzení 2: Procento % divokých karet způsobí, že SQL dotazy budou indexovat místo žádného indexu

Toto tvrzení je velmi jednostranné a 99 % indexu sníží IO a zlepší efektivitu ve srovnání s neindexováním, ale klíčová párovací akce po nalezení indexu je také částečně náročná na výkonnost. Jak je ukázáno na dvou obrázcích výše, pokud jsou klíčová slova snadno spárována, kompletní tabulkový sken rychle najde data a indexový skenování neušetří dostatek času, aby vykompenzovalo čas strávený akcí párování klíčů (většina online dotazů tento problém nemá).
Léčba:
1. Pokud vám na tom nezáleží, zvýšená spotřeba výkonu není příliš velká. A různá klíčová slova mají různou spotřebu, ale některá klíčová slova mají tento problém a mohou být ignorována
2. Lepším způsobem je vytvořit overfix index (známý také jako INCLUDE index), pokud to podmínky dovolují. Premisa: a. Úložný prostor je dostatečný, b významně neovlivňuje DML operace a c nemá velká pole v přepsaném indexu

VYTVOŘTE NESHLUKOVANÝ INDEX [Ix_index NÁZEV] NA [dbo]. [wkf_ Název stolu]
(
[db_title]  ASC
)
INCLUDE ( [db_id],[db_Summary],[db_AddDate])

V tuto chvíli je plán dotazu provedení následující, což je mnohem osvěžující


Výše uvedené je to, co mě teď napadá pro zpracování SQLSERVER SELECT * FROM TABLENAME jako '%Keyword %'






Předchozí:Replikace transakcí SQL Server přidává nové tabulky bez nutnosti reinicializace
Další:Praktické SQL tvrzení: odhad data
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com