Plánovač dotazů

Stabilní verze byla odhlášena 11. července 2020 . Existují neověřené změny v šablonách nebo .

Plánovač dotazů je uspořádaná sada kroků používaných pro přístup k datům v systému správy relačních databází SQL . Toto je specifický případ konceptu modelů relačních přístupových plánů. Vzhledem k tomu, že SQL je deklarativní, existuje obvykle velké množství alternativních způsobů provedení daného dotazu s širokým rozsahem výkonu. Když je dotaz odeslán do databáze, optimalizátor dotazů vyhodnotí některé z různých, správných možných plánů provádění dotazu a vrátí to, co považuje za nejlepší možnost. Protože optimalizátory dotazů nejsou dokonalé, uživatelé a správci databází někdy potřebují ručně zkontrolovat a vyladit plány generované optimalizátorem, aby zvýšili výkon.

Vytváření plánů dotazů

Daný systém správy databáze může nabízet jeden nebo více mechanismů pro vrácení plánu pro daný dotaz. Některé balíčky mají nástroje, které vygenerují grafické znázornění plánu dotazů. Další nástroje vám umožňují nastavit speciální režim připojení, abyste přinutili DBMS vrátit textový popis plánu dotazů. Další mechanismus pro načítání plánu dotazů zahrnuje dotazování na virtuální databázovou tabulku po provedení dotazu, který má být zkoumán. Například v Oracle toho lze dosáhnout pomocí příkazu EXPLAIN PLAN.

Grafické plány

Například nástroj SQL Server Management Studio, který je součástí Microsoft SQL Server , zobrazuje tento graf při připojení dvou tabulek k ukázkové databázi:

VYBRAT* FROM HumanResources.Employee AS e INNER JOIN Person.Contact AS c ON e.ContactID = c.ContactID ORDER BY c.LastName

Uživatelské rozhraní vám umožňuje prozkoumat různé atributy příkazů zapojených do plánu dotazů, včetně typu příkazu, počtu řádků, které každý příkaz spotřebuje nebo vytvoří, a očekávaných nákladů na každý příkaz.

Textové plány

Zde je zobrazen textový plán uvedený pro stejný dotaz na snímku obrazovky

StmtText ---- |--Sort(ORDER BY:([c].[LastName] ASC)) |--Vnořené smyčky(Vnitřní spojení, VNĚJŠÍ ODKAZY:([e].[ČID kontaktu], [Expr1004]) S NEPOŘÁDNÝM PŘEDNAČTENÍM) |--Clustered Index Scan(OBJECT:([AdventureWorks].[HumanResources].[Employee].[PK_Employee_EmployeeID] AS [e])) |--Hledat seskupený index(OBJECT:([AdventureWorks].[Osoba].[Kontakt].[PK_Contact_ContactID] AS [c]), HLEDAT:([c].[ČID kontaktu]=[AdventureWorks].[HumanResources].[Zaměstnanec].[Číslo kontaktu] jako [e].[ČID kontaktu]) PŘEDLOŽENO)

Určuje, že dotazovací stroj zkontroluje index primárního klíče v tabulce Zaměstnanec a vyhledá index primárního klíče (sloupec ContactID) v tabulce Kontakt, aby našel odpovídající řádky. Výsledné řádky na každé straně se zobrazí operátoru kombinování vnořených smyček, seřadí se a poté se vrátí jako sada výsledků pro spojení. K přizpůsobení dotazu musí uživatel rozumět různým operátorům, které může databáze používat, a těm, které mohou být efektivnější než ostatní, a přitom stále poskytovat sémanticky správné výsledky dotazu.

Nastavení databáze

Zobrazení plánu dotazů může poskytnout příležitosti pro nové indexy nebo změny existujících indexů. Může také ukázat, že databáze správně nepoužívá existující indexy (viz Optimalizátor dotazů ).

Přizpůsobení požadavků

Hlavní článek: Optimalizátor dotazů Optimalizátor dotazů ne vždy vybere nejefektivnější plán dotazů pro daný dotaz. V některých databázích lze plán dotazů zkontrolovat, nalézt problémy a poté optimalizátor dotazů poskytne rady, jak jej vylepšit. V jiných databázích lze vyzkoušet alternativy k vyjádření jednoho dotazu (jiné dotazy vracející stejné výsledky). Některé nástroje pro dotazy mohou generovat vložené tipy pro dotazy pro použití optimalizátorem. Některé databáze, jako je Oracle, poskytují tabulku plánu pro ladění dotazů. Tato tabulka plánu vrátí náklady a čas provedení dotazu. Oracle nabízí dva optimalizační přístupy:

  • Optimalizace na základě CBO nebo nákladů
  • RBO neboli optimalizace založená na pravidlech

RBO pomalu zastarává. Chcete-li použít CBO, musí být analyzovány všechny tabulky, na které odkazuje dotaz. K analýze tabulky může DBA spustit kód z balíku DBMS_STATS. Další nástroje pro optimalizaci dotazů:

Odkazy