J'ai beaucoup entendu ces derniers temps que SQL est un langage terrible, et il semble que chaque framework sous le soleil soit pré-emballé avec une couche d'abstraction de base de données.
Notez que ces couches convertissent simplement leurs propres éléments en SQL
. Pour la plupart des fournisseurs de bases de données, SQL
c'est le seul moyen de communiquer avec le moteur.
Cependant, d'après mon expérience, SQL est souvent le moyen le plus simple, le plus polyvalent et le plus convivial pour les programmeurs de gérer l'entrée et la sortie de données. Chaque couche d'abstraction que j'ai utilisée semble être une approche nettement limitée sans réel avantage.
… Raison pour laquelle je viens de décrire ci-dessus.
Les couches de base de données n'ajoutent rien, elles vous limitent simplement . Ils rendent les requêtes incontestablement plus simples mais jamais plus efficaces.
Par définition, il n'y a rien dans les couches de base de données qui n'y soit pas SQL
.
Qu'est-ce qui rend SQL
si terrible et pourquoi les couches d'abstraction de base de données sont-elles précieuses?
SQL
est un langage agréable, cependant, il faut une certaine torsion du cerveau pour travailler avec.
En théorie, SQL
c'est déclaratif, c'est-à-dire que vous déclarez ce que vous voulez obtenir et que le moteur le fournit de la manière la plus rapide possible.
En pratique, il existe de nombreuses façons de formuler une requête correcte (c'est-à-dire la requête qui renvoie des résultats corrects).
Les optimiseurs sont capables de construire un château Lego à partir de certains algorithmes prédéfinis (oui, ils sont multiples), mais ils ne peuvent tout simplement pas créer de nouveaux algorithmes. Il faut encore un SQL
développeur pour les aider.
Cependant, certaines personnes s'attendent à ce que l'optimiseur produise "le meilleur plan possible", et non "le meilleur plan disponible pour cette requête avec une implémentation donnée du SQL
moteur".
Et comme nous le savons tous, lorsque le programme informatique ne répond pas aux attentes des gens, c'est le programme qui est blâmé, pas les attentes.
Dans la plupart des cas, cependant, la reformulation d'une requête peut effectivement produire le meilleur plan possible. Cependant, SQL
certaines tâches sont impossibles, car les améliorations nouvelles et croissantes apportées à ces cas deviennent de moins en moins nombreuses.
Ce serait bien, cependant, que les fournisseurs fournissent un accès de bas niveau aux fonctions comme "obtenir la plage d'index", "obtenir une ligne par le rowid
" etc., comme les C
compilateurs vous permettent d'incorporer l'assembly directement dans le langage.
J'ai récemment écrit un article à ce sujet dans mon blog: