Utförandeplan för frågor

Den stabila versionen kontrollerades den 14 augusti 2019 . Det finns overifierade ändringar i mallar eller .

Exekveringsplan för fråge  - en sekvens av operationer som krävs för att erhålla resultatet av en SQL -fråga i ett relationellt DBMS .

Planen som helhet är uppdelad i två steg:

Sortering och gruppering  är ett valfritt steg som utförs om inga åtkomstvägar hittas för att få resultatet i den begärda ordningen.

Provtagningen av resultat utförs på följande sätt:

Kapslade loopar

Kapslade loopar  är kapslade iterativa processer för att hitta data i var och en av de sammanfogade tabellerna.

Den yttre slingan hämtar alla nödvändiga rader från den yttre tabellen. Om några eller alla begränsningarna på den yttre tabellen kan användas för att söka igenom indexet, så söks vid varje iteration av slingan platsen för alla nödvändiga rader i indexet och en direkt åtkomst till tabellen utförs. Annars skannas hela tabellen. De återstående gränserna används för att filtrera de valda raderna. För varje återstående rad anropas den inre slingan.

Den inre slingan söker efter rader i den inre tabellen med hjälp av kopplingsvillkoren och data för den yttre slingan. Om några eller alla begränsningarna för den inre tabellen, såväl som begränsningarna som erhålls från den yttre slingan, kan användas för att söka igenom indexet, så söks vid varje iteration av slingan efter platserna för alla nödvändiga rader i index och en direktåtkomst till tabellen utförs. Annars skannas hela tabellen. De återstående gränserna används för att filtrera de valda raderna.

Slingor kan kapslas ett godtyckligt antal gånger. I det här fallet blir den inre slingan den yttre slingan för nästa slinga, och så vidare.

Vid varje iteration av den djupaste slingan sammanfogas raderna från tabellerna för att erhålla en rad av det slutliga resultatet.

Om en indexsökning utförs för någon cykel, och alla kolumner i indexet är tillräckliga för att erhålla det slutliga resultatet, utförs inte direktåtkomst till tabellen i denna cykel.

Sammanslagning

Om tabellerna som sammanfogas har index på de fält som jämförs, kan sammanfogningen utföras med en sammanfogning . Båda indexen skannas och söks efter samma värden. Om det finns tillräckligt många kolumner i indexen för att få det slutliga resultatet, läses inte tabellerna. I annat fall görs direktåtkomst till de tabeller som ska slås samman för att få kolumner som inte ingår i indexen, men som är nödvändiga för att få resultatet.

Om sammanslagningen inte räcker för att få det slutliga resultatet, kan upp till två serier av kapslade loopar utföras för varje rad som sammanfogas, för var och en av de tabeller som slås samman.

På grund av sorterad data i index är sammanslagning billigare än kapslade loopar, men exekveringsplanen kan inte börja med en sammanslagning.

Exempel

Till exempel för en fråga som:

VÄLJ FRÅN Försäljning BESTÄLL EFTER Seller_number

En utförandeplan som denna kan skapas:

  1. Klustrad indexsökning efter primärnyckeln i tabellen Försäljning .
  2. Sortera resultaten från steg 1 efter kolumn Seller_Number .
  3. Returnera resultatet av steg 2 till applikationen.

Frågeoptimeraren (en komponent i DBMS) använder statistisk information lagrad i databasen, tillsammans med tabeller och index, på basis av vilken den utvärderar alternativa sätt att generera frågeresultat. Till exempel kan ett ORDER BY-kommando i en SELECT-sats köras med ett index i databasen eller genom att fysiskt sortera raderna. Optimeraren försöker välja den mest effektiva planen för exekvering av frågor.

Genom att undersöka exekveringsplanerna som skapats av optimeraren kan du bestämma hur du ska påskynda exekveringen av frågan - ändra själva frågan eller skapa ett extra index i databasen. Vissa DBMS låter dig explicit påverka hur exakt optimeraren genererar en plan, för vilken det finns ett speciellt tipsspråk .

Se även

Litteratur

Länkar