Elaborazione di un'istruzione SQL

Prima di parlare delle tecniche per utilizzare SQL in modo programmatico, è necessario parlare di come viene elaborata un'istruzione SQL. I passaggi coinvolti sono comuni a tutte e tre le tecniche, anche se ogni tecnica le esegue in momenti diversi. La figura seguente mostra le fasi di elaborazione di un'istruzione SQL, che verranno discusse nel resto di questa sezione.

Steps for processing an SQL statement

Per elaborare un'istruzione SQL, un DBMS esegue i cinque passaggi seguenti:

  1. Il DBMS analizza innanzitutto l'istruzione SQL. Scompone l'affermazione in singole parole, chiamate token, si assicura che l'affermazione abbia un verbo valido e clausole valide, e così via. In questa fase è possibile individuare gli errori di sintassi e gli errori ortografici.

  2. Il DBMS convalida l'istruzione. Controlla la dichiarazione rispetto al catalogo di sistema. Tutte le tabelle denominate nell'istruzione esistono nel database? Esistono tutte le colonne e i nomi delle colonne sono univoci? L'utente dispone dei privilegi necessari per eseguire l'istruzione? In questo passaggio è possibile rilevare alcuni errori semantici.

  3. Il DBMS genera un piano di accesso per l'istruzione. Il piano di accesso è una rappresentazione binaria dei passi necessari per eseguire l'istruzione; è l'equivalente DBMS del codice eseguibile.

  4. Il DBMS ottimizza il piano di accesso. Esplora vari modi per realizzare il piano di accesso. È possibile usare un indice per velocizzare una ricerca? Il DBMS deve prima applicare una condizione di ricerca alla tabella A e poi unirla alla tabella B, oppure deve iniziare con l'unione e usare la condizione di ricerca in seguito? È possibile evitare una ricerca sequenziale in una tabella o ridurla a un sottoinsieme della tabella? Dopo aver esplorato le alternative, il DBMS ne sceglie una.

  5. Il DBMS esegue l'istruzione eseguendo il piano di accesso.

I passaggi utilizzati per elaborare un'istruzione SQL variano in base alla quantità di accesso al database che richiedono e al tempo che impiegano. L'analisi di un'istruzione SQL non richiede l'accesso al database e può essere eseguita molto rapidamente. L'ottimizzazione, invece, è un processo molto impegnativo per la CPU e richiede l'accesso al catalogo di sistema. Per una query complessa e tra più tabelle, l'ottimizzatore può esplorare migliaia di modi diversi di eseguire la stessa query. Tuttavia, il costo dell'esecuzione inefficiente della query è solitamente così alto che il tempo speso per l'ottimizzazione è più che recuperato dall'aumento della velocità di esecuzione della query. Questo è ancora più significativo se lo stesso piano di accesso ottimizzato può essere utilizzato più volte per eseguire query ripetitive.