Tips (SQL)

En ledtråd på SQL- språket ( engelska  hint ) är ett verktyg som låter dig explicit påverka frågeplanen .

Själva SQL-frågan innehåller en indikation på vilken information som behöver hämtas från databasen, men innehåller inga instruktioner om hur man gör detta. I det allmänna fallet bestämmer relationella DBMS :er frågeplanen enligt sina egna regler och exekverar den följaktligen. Men i praktiken kan ett fall uppstå att en sådan frågeplan, på grund av faktorer som inte beaktas av DBMS, logiska brister eller speciella krav, kan visa sig vara suboptimal. Tipset tillåter dig att explicit ingripa i bildandet av frågeplanen, utan att helt förlita dig på automatisering.

Syntaxen och uppsättningen av tips beskrivs inte i SQL-standarden , den är starkt beroende av den specifika implementeringen av DBMS.

Följande ledtrådsuppgifter urskiljs:

I vissa fall kan DBMS ignorera tipset.

Implementeringsfunktioner

Microsoft SQL Server

Microsoft SQL Server har lagt till några nyckelord för att tipsa om optimeraren, till exempel i en fråga:

VÄLJ * FRÅN kunder C MED ( INDEX = stad ) INNER LOOP JOIN Beställningar O O . Kund -ID = C . Kundnummer VAR C . Stad = 'Madrid'

det finns två tips:

  • LOOP - indikerar att tabeller ska sammanfogas med metoden kapslade loopar
  • WITH (INDEX=City)- indikerar att ett index som heter Stad ska användas för  att komma åt tabellen Kunder

Oracle Database

I Oracle Database infogas tips i frågetexten som en kommentar. Texten i kommentaren tolkas och, om den visar sig matcha syntaxen för promptspråket, accepteras den. På grund av denna syntax kan en fråga med tips exekveras på ett annat DBMS utan modifiering, och ett stavfel i tipset gör att tipset behandlas av servern som en enkel kommentar [1] . Till exempel, i en begäran:

VÄLJ /*+ full(t) */ t . namn FRÅN tbl1 t VAR t . datum = SYSDATE SELECT /*+ index(t ind_date) */ t . namn FRÅN tbl1 t VAR t . datum = SYSDATE

använde följande tips:

  • /*+ full(t) */ - indikerar att sökningen ska utföras genom att skanna hela tabellen
  • /*+ index(t ind_date) */ - indikerar att sökningen ska utföras på ett specifikt index

MySQL

I MySQL , från och med version 3.23.12, kan du specificera vilka index (nycklar) MySQL ska använda för att hämta information från en tabell [2] :

tabellnamn [[ AS ] alias ] [[ ANVÄND INDEX ( nyckellista )] | [ IGNORERA INDEX ( key_list )] | FORCE INDEX ( key_list )]]

Anteckningar

  1. Tips för Oracle sql-prestanda . Hämtad 17 februari 2010. Arkiverad från originalet 11 februari 2010.
  2. MySQL-språkreferens . Tillträdesdatum: 24 juli 2009. Arkiverad från originalet 14 juli 2009.