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