Elaborazione di un'istruzione SQL

Prima di discutere le tecniche per l'uso di SQL a livello di codice, è necessario illustrare 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. Nella figura seguente vengono illustrati i passaggi necessari per l'elaborazione di un'istruzione SQL, che vengono illustrati nella parte restante di questa sezione.

Passaggi per l'elaborazione di un'istruzione SQL

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 usati per elaborare un'istruzione SQL variano in base alla quantità di accesso al database necessaria e alla quantità di tempo necessaria. 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.