Tenho ouvido muito ultimamente que SQL é uma linguagem terrível, e parece que todo framework sob o sol vem pré-empacotado com uma camada de abstração de banco de dados.
Observe que essas camadas apenas convertem suas próprias coisas em SQL
. Para a maioria dos fornecedores de banco de dados, SQL
é a única maneira de se comunicar com o mecanismo.
Porém, em minha experiência, SQL é frequentemente a maneira muito mais fácil, mais versátil e mais amigável para o programador de gerenciar a entrada e saída de dados. Cada camada de abstração que usei parece ser uma abordagem marcadamente limitada, sem nenhum benefício real.
… Razão que acabei de descrever acima.
As camadas do banco de dados não adicionam nada, apenas limitam você. Eles tornam as consultas mais simples, mas nunca mais eficientes.
Por definição, não há nada nas camadas do banco de dados que não esteja em SQL
.
O que é SQL
tão terrível e por que as camadas de abstração do banco de dados são valiosas?
SQL
é uma boa linguagem, no entanto, é preciso um pouco do cérebro para trabalhar com ela.
Em teoria, SQL
é declarativo, ou seja, você declara o que deseja obter e a engine fornece da maneira mais rápida possível.
Na prática, existem muitas maneiras de formular uma consulta correta (ou seja, a consulta que retorna resultados corretos).
Os otimizadores são capazes de construir um castelo de Lego a partir de alguns algoritmos predefinidos (sim, eles são múltiplos), mas eles simplesmente não podem fazer novos algoritmos. Ainda é preciso um SQL
desenvolvedor para ajudá-los.
No entanto, algumas pessoas esperam que o otimizador produza "o melhor plano possível", não "o melhor plano disponível para esta consulta com determinada implementação do SQL
mecanismo".
E como todos sabemos, quando o programa de computador não atende às expectativas das pessoas, é o programa que leva a culpa, não as expectativas.
Na maioria dos casos, entretanto, a reformulação de uma consulta pode produzir o melhor plano possível. Existem tarefas quando é impossível, no entanto, com as melhorias novas e crescentes paraSQL
esses casos, cada vez menos.
Seria bom, entretanto, se os fornecedores fornecessem algum acesso de baixo nível às funções como "obter o intervalo do índice", "obter uma linha pelo rowid
" etc., como os C
compiladores permitem que você insira o assembly diretamente na linguagem.
Recentemente escrevi um artigo sobre isso no meu blog: