Dotazový plán - Query plan

Plán dotazů (nebo plán provádění dotazu ) je posloupnost kroků použitých k přístupu k datům v systému správy relační databáze SQL . Toto je specifický případ konceptu relačního modelu přístupových plánů.

Vzhledem k tomu, že SQL je deklarativní , existuje obvykle mnoho alternativních způsobů, jak daný dotaz provést, přičemž výkon se velmi liší. 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ů pro provedení dotazu a vrátí to, co považuje za nejlepší možnost. Protože optimalizátory dotazů jsou nedokonalé, uživatelé databáze a správci někdy potřebují k lepšímu výkonu ručně prozkoumat a vyladit plány vytvořené optimalizátorem.

Generování plánů dotazů

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

Grafické plány

Nástroj Microsoft SQL Server Management Studio , který je dodáván například s Microsoft SQL Server , ukazuje tento grafický plán při provádění tohoto příkladu spojení dvou tabulek proti zahrnuté ukázkové databázi:

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

Uživatelské rozhraní umožňuje zkoumání různých atributů operátorů zapojených do plánu dotazů, včetně typu operátora, počtu řádků, které každý operátor spotřebuje nebo vyrobí, a očekávaných nákladů na práci každého operátora.

Image
Microsoft SQL Server Management Studio zobrazující ukázkový plán dotazů.

Textové plány

Textový plán zadaný pro stejný dotaz na snímku obrazovky je zobrazen zde:

StmtText
----
  |--Sort(ORDER BY:([c].[LastName] ASC))
       |--Nested Loops(Inner Join, OUTER REFERENCES:([e].[ContactID], [Expr1004]) WITH UNORDERED PREFETCH)
            |--Clustered Index Scan(OBJECT:([AdventureWorks].[HumanResources].[Employee].[PK_Employee_EmployeeID] AS [e]))
            |--Clustered Index Seek(OBJECT:([AdventureWorks].[Person].[Contact].[PK_Contact_ContactID] AS [c]),
               SEEK:([c].[ContactID]=[AdventureWorks].[HumanResources].[Employee].[ContactID] as [e].[ContactID]) ORDERED FORWARD)

Udává, že vyhledávací stroj provede skenování indexu primárního klíče v tabulce Zaměstnanec a hledání shody prostřednictvím indexu primárního klíče (sloupec ContactID) v tabulce Kontaktů, aby našel odpovídající řádky. Výsledné řádky z každé strany se zobrazí operátorovi vnořených smyček, roztřídí se a poté se vrátí jako sada výsledků připojení.

Aby mohl uživatel vyladit dotaz, musí pochopit různé operátory, které může databáze používat, a které mohou být efektivnější než ostatní a přitom poskytovat sémanticky správné výsledky dotazů.

Ladění databáze

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

Ladění dotazů

Optimalizátor dotazů ne vždy zvolí nejefektivnější plán dotazů pro daný dotaz. V některých databázích lze plán dotazů zkontrolovat, najít problémy a poté optimalizátor dotazů poskytne rady, jak jej zlepšit. V jiných databázích lze vyzkoušet alternativy k vyjádření stejného dotazu (jiné dotazy, které vracejí stejné výsledky). Některé nástroje dotazu mohou v dotazu generovat vložené rady pro použití optimalizátorem.

Některé databáze - například Oracle - poskytují plánovací tabulku pro ladění dotazů. Tato tabulka plánu vrátí náklady a čas na provedení dotazu. Oracle nabízí dva optimalizační přístupy:

  1. CBO nebo optimalizace založená na nákladech
  2. Optimalizace založená na pravidlech nebo RBO

RBO se pomalu přestává používat. Aby bylo možné použít CBO, musí být analyzovány všechny tabulky, na které dotaz odkazuje. K analýze tabulky může DBA spustit kód z balíčku DBMS_STATS.

Mezi další nástroje pro optimalizaci dotazů patří:

  1. Trasování SQL
  2. Oracle Trace a TKPROF
  3. Plán spouštění Microsoft SMS (SQL)
  4. Záznam výkonu tabla (všechny DB)

Reference