sql >> Databáze >  >> RDS >> Sqlserver

Proč dokončení tohoto příkazu SQL (se 2 spojeními tabulek) trvá 5 minut?

To není správné.

Mám dvě možnosti:

1) Statistiky jsou v tabulkách zastaralé. Znovu sestavte indexy a aktualizujte statistiky.

2) Jak jste řekl, záznamy geografické tabulky jsou velké a zahrnují mnoho stránek (ne že by jeden záznam pokrýval více stránek, protože to nejde, ale záznam se blíží značce 8K). V tomto případě by mohlo pomoci vytvoření dalšího neklastrovaného indexu na seskupeném indexu.

AKTUALIZACE

Jsem rád, že to fungovalo. Nyní nějaké vysvětlení.

Za prvé, pokud něco není opravdu v pořádku a plán provádění vypadá divně, vždy se podívejte na statistiky a přestavte indexy.

Vytvoření indexu bez klastrů pro seskupený index by obvykle nemělo přinést žádnou výhodu, ale když má tabulka mnoho záznamů a záznam se blíží limitu 8 kB, je to užitečné. Jak víte, SQL, když jde na disk načíst záznam, načte stránku o velikosti 8 kB. Podobným způsobem jako u indexů načte stránku o velikosti 8 kB. Nyní, když je index 4bajtové celé číslo, znamená to načtení ID pro 2000 záznamů, zatímco se načte několik záznamů, pokud používá seskupený index (mějte na paměti, že vše, co potřebujeme, je ID pro bit JOIN). Vzhledem k tomu, že jde o binární vyhledávání, neočekávám, že by to nějak výrazně pomohlo. Takže možná něco jiného není úplně v pořádku, ale těžko uhodnout, když jsem systém neviděl.



  1. Chyba Mysql InnoDB 32 v systému Windows

  2. Jak vybrat nejstarší datum z MySQL

  3. Proč fputcsv vytváří duplicitní sloupce?

  4. Chart.js v2.6:Přidejte šipky k výstupním hodnotám koláčového grafu