Příznaky
Předpokládejme, že máte tabulku používající omezení cizího klíče nastavené na kaskádové odstranění a statistika ve sloupci cizího klíče nepokrývá celou oblast klíčových hodnot v tabulce (například proto, že se po změně distribuce dat v tabulce neaktualizovala statistika). Když se v tomto scénáři pokusíte odstranit řádek odpovídající hodnotě klíče, která není zastoupena v histogramu statistiky, a optimalizátor dotazů používá výchozí odhad mohutnosti, bude operace odstranění pomalejší, než se očekávalo. Můžete si také všimnout, že operace prohledávání indexu se používá k nalezení odpovídajících řádků v odkazující tabulce.
Stav
Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.
Řešení
Tento problém je opravený v následujících kumulativních aktualizacích pro SQL Server:
Poznámka: Tato oprava je povolená jenom v případě, že zapnete opravy hotfix pro optimalizaci (buď prostřednictvím možnosti konfigurace s oborem databáze, nápovědy dotazu nebo příznaku trasování 4199).
Informace o kumulativních aktualizacích pro SQL Server:
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace pro SQL Server:
- Nejnovější kumulativní aktualizace pro SQL Server 2019
- Nejnovější kumulativní aktualizace pro SQL Server 2017
Alternativní řešení
Chcete-li tento problém vyřešit, použijte jednu z následujících metod:
- Použijte starší odhad mohutnosti. Další informace najdete v tématu Odhad mohutnosti (SQL Server).
- Odeberte kaskádové odstranění z definice cizího klíče a proveďte operaci odstranění pomocí příkazu JOIN mezi nadřazenými a podřízenými tabulkami, abyste dosáhli ekvivalentu kaskádového odstranění.
- Před odstraněním dat aktualizujte statistiku nadřazené tabulky pomocí funkce FULLSCAN.
Reference
Podívejte se na informace o terminologii, kterou společnost Microsoft používá k popisování aktualizací softwaru.