Procesar una instrucción SQL
Antes de analizar las técnicas para usar SQL mediante programación, es necesario analizar cómo se procesa una instrucción SQL. Los pasos implicados son comunes a las tres técnicas, aunque cada técnica las realiza en momentos diferentes. En la ilustración siguiente se muestran los pasos implicados en el procesamiento de una instrucción SQL, que se describen en el resto de esta sección.
Para procesar una instrucción SQL, dbMS realiza los cinco pasos siguientes:
El DBMS analiza primero la instrucción SQL. Divide la instrucción en palabras individuales, denominadas tokens, se asegura de que la instrucción tenga un verbo válido y cláusulas válidas, etc. Los errores de sintaxis y los errores ortográficos se pueden detectar en este paso.
El DBMS valida la instrucción . Comprueba la instrucción en el catálogo del sistema. ¿Existen todas las tablas denominadas en la instrucción en la base de datos? ¿Existen todas las columnas y los nombres de columna no son ambiguos? ¿El usuario tiene los privilegios necesarios para ejecutar la instrucción? En este paso se pueden detectar determinados errores semánticos.
El DBMS genera un plan de acceso para la instrucción. El plan de acceso es una representación binaria de los pasos necesarios para llevar a cabo la instrucción; es el equivalente de DBMS del código ejecutable.
El DBMS optimiza el plan de acceso. Explora varias maneras de llevar a cabo el plan de acceso. ¿Se puede usar un índice para acelerar una búsqueda? ¿El DBMS debe aplicar primero una condición de búsqueda a la tabla A y, a continuación, combinarla con la tabla B, o debe comenzar con la combinación y usar la condición de búsqueda después? ¿Se puede evitar o reducir una búsqueda secuencial en una tabla a un subconjunto de la tabla? Después de explorar las alternativas, DBMS elige una de ellas.
DBMS ejecuta la instrucción ejecutando el plan de acceso.
Los pasos que se usan para procesar una instrucción SQL varían en la cantidad de acceso a la base de datos que requieren y la cantidad de tiempo que tardan. El análisis de una instrucción SQL no requiere acceso a la base de datos y se puede realizar muy rápidamente. La optimización, por otro lado, es un proceso muy intensivo de CPU y requiere acceso al catálogo del sistema. Para una consulta compleja y en múltiples tablas, el optimizador puede explorar miles de formas diferentes de llevar a cabo la misma consulta. Sin embargo, el costo de ejecutar la consulta de forma ineficaz suele ser tan alto que el tiempo invertido en la optimización se recupera con creces gracias a la mayor velocidad de ejecución de consultas. Esto es aún más significativo si se puede usar el mismo plan de acceso optimizado varias veces para realizar consultas repetitivas.