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.
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:
Î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 = SYSDATEa folosit următoarele indicii:
Î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 )]]