sql >> Databáze >  >> RDS >> PostgreSQL

Při jaké mohutnosti se SQL Server přepne na indexové skenování (vs. seek)

Pokud jde o SQL Server, toto bylo označováno jako bod zlomu, o kterém se dobře čte Kimberleyho blogový příspěvek. http://www.sqlskills.com/BLOGS/KIMBERLY /category/The-Tipping-Point.aspx

Bod zvratu je vodítko 25%-33% z celkového počtu stránek v tabulce, vyjádřeno jako řádky, např. 10 000 datových stránek by poskytlo bod zlomu 2500–3333 řádků. Jak jdou pokyny, je to docela dobré a tak dobré, jak můžete získat - pamatujte, že modul plánu dotazů je černá skříňka, a přestože vám poskytne plán dotazů, říká pouze to, co rozhodl, ne proč.

Pokud jde o tipování krycího indexu, není to ve skutečnosti příliš snadné, i když je vybráno 100 % dat, krycí index bude ve většině případů stále vyhledávat přeskenování.

To dává smysl, pokud uvážíte, že optimalizátor nákladů nepřiřazuje hierarchii stránek indexu žádné skutečné náklady, které pouze zvyšují přístup k listovým stránkám indexu. V tomto okamžiku je skenování nebo hledání 100 % indexu pokrytí zpoplatněno stejně.

Z vlastního experimentování jsem našel (http://sqlfascination.com/2009/11/07/can-a-covering-nc-index-be-tipped ) použití klauzule mezi by způsobilo skenování, ale jiné, kde klauzule nikoli – z toho, co jsem mohl říct, je to čistě na cestě přes dotazovací modul.



  1. MySQL DATE_FORMAT '%M' na krátký měsíc?

  2. Chyba Java SQL Server 2012 Nelze otevřít databázi

  3. CakePHP:Jak načíst data ze dvou tabulek pomocí vnitřního spojení?

  4. Má to vliv na výkon při použití DECIMAL(17,13) pro data zeměpisné šířky i délky v MySQL?