Últimamente he escuchado mucho que SQL es un lenguaje terrible, y parece que cada marco bajo el sol viene empaquetado previamente con una capa de abstracción de base de datos.
Tenga en cuenta que estas capas solo convierten sus propias cosas en SQL
. Para la mayoría de los proveedores de bases de datos SQL
es la única forma de comunicarse con el motor.
Sin embargo, en mi experiencia, SQL es a menudo la forma mucho más fácil, más versátil y más amigable para el programador de administrar la entrada y salida de datos. Cada capa de abstracción que he usado parece ser un enfoque marcadamente limitado sin ningún beneficio real.
… Razón por la que acabo de describir arriba.
Las capas de la base de datos no agregan nada, solo lo limitan . Hacen que las consultas sean discutiblemente más simples pero nunca más eficientes.
Por definición, no hay nada en las capas de la base de datos que no esté incluido SQL
.
¿Qué hace SQL
que sea tan terrible y por qué son valiosas las capas de abstracción de bases de datos?
SQL
es un lenguaje agradable, sin embargo, se necesita un poco de giro para trabajar con él.
En teoria, SQL
es declarativo, es decir, declaras lo que quieres obtener y el motor lo proporciona de la forma más rápida posible.
En la práctica, hay muchas formas de formular una consulta correcta (es decir, la consulta que devuelve resultados correctos).
Los optimizadores pueden construir un castillo de Lego a partir de algunos algoritmos predefinidos (sí, son múltiples), pero simplemente no pueden crear nuevos algoritmos. Todavía se necesita un SQL
desarrollador para ayudarlos.
Sin embargo, algunas personas esperan que el optimizador produzca "el mejor plan posible", no "el mejor plan disponible para esta consulta con una implementación determinada del SQL
motor".
Y como todos sabemos, cuando el programa de computadora no cumple con las expectativas de la gente, se culpa al programa, no a las expectativas.
En la mayoría de los casos, sin embargo, reformular una consulta puede producir el mejor plan posible. Hay tareas en las que es imposible, sin embargo, con las nuevas y crecientes mejoras deSQL
estos casos, cada vez son menos.
Sería bueno, sin embargo, si los proveedores proporcionaran algún acceso de bajo nivel a funciones como "obtener el rango de índice", "obtener una fila por rowid
", etc., como los C
compiladores le permiten incrustar el ensamblado directamente en el lenguaje.
Recientemente escribí un artículo sobre esto en mi blog: