Sugestie (SQL)

Un indiciu în limbajul SQL ( hint engleză  ) este un instrument care vă permite să influențați în mod explicit planul de interogare .

Interogarea SQL în sine conține o indicație a informațiilor care trebuie obținute din baza de date, dar nu conține instrucțiuni despre cum să faceți acest lucru. În cazul general, SGBD-urile relaționale determină planul de interogare după propriile reguli și, în consecință, îl execută. Cu toate acestea, în practică, poate apărea un caz în care un astfel de plan de interogare, din cauza unor factori neluați în considerare de SGBD, imperfecțiuni logice sau cerințe speciale, se poate dovedi a fi suboptim. Sugestia vă permite să interveniți în mod explicit în formarea planului de interogare, fără a vă baza în întregime pe automatizare.

Sintaxa și setul de indicii nu sunt descrise în standardul SQL , ele depind foarte mult de implementarea specifică a SGBD.

Se disting următoarele atribuiri de indicii:

În unele cazuri, SGBD-ul poate ignora indicația.

Caracteristici de implementare

Microsoft SQL Server

Microsoft SQL Server a adăugat câteva cuvinte cheie pentru a indica optimizator, de exemplu într-o interogare:

SELECTAȚI * DE LA Clienții C CU ( INDEX = Oraș ) INNER LOOP JOIN Comenzi O ON O . ID client = C . Număr de înregistrare client UNDE C . Oraș = „Madrid”

sunt doua indicii:

  • LOOP - indică faptul că tabelele ar trebui să fie unite folosind metoda buclelor imbricate
  • WITH (INDEX=City)- indică faptul că ar trebui folosit un index numit Oraș  pentru a accesa tabelul Clienți

Baza de date Oracle

În baza de date Oracle, indicii sunt inserate în textul interogării ca comentariu. Textul comentariului este analizat și, dacă se găsește că se potrivește cu sintaxa limbajului prompt, este acceptat. Datorită acestei sintaxe, o interogare cu indicii poate fi executată pe un alt DBMS fără modificare, iar o greșeală de tipar în hint face ca hintul să fie tratat de server ca un simplu comentariu [1] . De exemplu, într-o cerere:

SELECT /*+ complet(t) */ t . nume FROM tbl1 t UNDE t . data = SYSDATE SELECT /*+ index(t ind_date) */ t . nume FROM tbl1 t UNDE t . data = SYSDATE

a folosit următoarele indicii:

  • /*+ full(t) */ - indică faptul că căutarea trebuie efectuată prin scanarea întregului tabel
  • /*+ index(t ind_date) */ - indică faptul că căutarea trebuie efectuată pe un index specific

MySQL

În MySQL , începând cu versiunea 3.23.12, puteți specifica ce indecși (chei) ar trebui să folosească MySQL pentru a prelua informații dintr-un tabel [2] :

nume_tabel [[ AS ] alias ] [[ USE INDEX ( lista de chei )] | [ IGNORARE INDEX ( lista de chei )] | FORCE INDEX ( lista de chei )]]

Note

  1. Sugestii pentru performanța Oracle sql . Consultat la 17 februarie 2010. Arhivat din original pe 11 februarie 2010.
  2. Referință pentru limbajul MySQL . Data accesului: 24 iulie 2009. Arhivat din original la 14 iulie 2009.