SQLite 3.25 : la prochaine version du moteur de base de données va apporter le support des fonctions Window
Et un meilleur optimiseur de requêtes

Le , par Michael Guilloux

122PARTAGES

15  0 
SQLite est un moteur de base de données relationnelle léger accessible par le langage SQL. Contrairement aux serveurs de bases de données traditionnels, comme MySQL ou PostgreSQL, sa particularité est de ne pas reproduire le schéma habituel client-serveur, mais d'être directement intégrée aux programmes. L'intégralité de la base de données (déclarations, tables, index et données) est en effet stockée dans un fichier indépendant de la plateforme.

SQLite est le moteur de base de données le plus utilisé au monde. Grâce à son extrême légèreté, entre autres, il est utilisé dans de nombreux logiciels grand public, et est également très populaire sur les systèmes embarqués, notamment sur la plupart des smartphones modernes.


La prochaine version, SQLite 3.25.0, est prévue pour le mois prochain, et le 16 août, la communauté SQLite a publié sur son site officiel un aperçu de ce que les utilisateurs peuvent attendre de cette version. Il s'agit d'un draft qui met en avant quelques fonctionnalités et correctifs ; les principales nouveautés étant l'ajout du support des fonctions Window et des améliorations de l'optimiseur de requêtes.

Une fonction Window (ou fonction de fenêtrage) est une fonction SQL spéciale dans laquelle les valeurs d'entrée proviennent d'une "fenêtre" d'une ou de plusieurs lignes du jeu de résultats d'une instruction SELECT. Les fonctions de fenêtrage se distinguent des fonctions SQL ordinaires par la présence d'une clause OVER. Elles peuvent également comporter une clause FILTER entre la fonction de base et la clause OVER. Contrairement aux fonctions ordinaires, les fonctions de fenêtrage ne peuvent pas utiliser le mot-clé DISTINCT. De plus, elles ne peuvent apparaître que dans le jeu de résultats et dans la clause ORDER BY d'une instruction SELECT.

Une fonction de fenêtrage effectue un calcul sur un jeu d'enregistrements liés d'une certaine façon à l'enregistrement courant. On peut les rapprocher des calculs réalisables par une fonction d'agrégat, mais contrairement à une fonction d'agrégat, l'utilisation d'une fonction de fenêtrage n'entraîne pas le regroupement des enregistrements traités en un seul. Chaque enregistrement garde son identité propre. Mais en coulisse, la fonction de fenêtrage est capable d'accéder à d'autres enregistrements que l'enregistrement courant du résultat de la requête. Voici un exemple tiré de la documentation PostgreSQL permettant de comparer le salaire d'un employé (noemp) avec le salaire moyen de sa division (nomdep) :


Les trois premières colonnes viennent directement de la table salaireemp, et il y a une ligne de sortie pour chaque ligne de la table. La quatrième colonne représente une moyenne calculée sur tous les enregistrements de la table qui ont la même valeur de nomdep que la ligne courante. Il s'agit effectivement de la même fonction que la fonction d'agrégat classique avg, mais la clause OVER entraîne son exécution en tant que fonction de fenêtrage et son calcul sur le jeu approprié d'enregistrements. Cela illustre un peu l'utilité des fonctions de fenêtrage.

Précisons que la communauté SQLite a effectué plusieurs tests sur PostgreSQL pour s'assurer que les fonctions de fenêtrage introduites dans la version 3.25.0 fonctionnent de la même manière dans SQLite et PostgreSQL.

Comme nous l'avons annoncé également, SQLite 3.25 apporte des améliorations de l'optimiseur de requêtes. On notera par exemple que les chargements inutiles de colonnes dans une requête agrégée seront évités. Il s'agit de colonnes qui ne sont ni dans une fonction d'agrégation ni dans une partie de la clause GROUP BY. Cette version va également introduire l'optimisation IN-early-out. En effet, lors d'une recherche sur un index multicolonnes, un opérateur IN est utilisé sur une colonne autre que la colonne la plus à gauche. Si aucune ligne ne correspond à la première valeur IN, SQLite va vérifier l’existence de lignes correspondant aux colonnes à droite avant de poursuivre avec la prochaine valeur IN. Comme autre amélioration de l'optimiseur de requêtes, il faut également souligner que la propriété transitive peut être utilisée pour propager des valeurs constantes dans la clause WHERE. Par exemple, cela permet de convertir “a=99 AND b=a” en “a=99 AND b=99”.

Ce ne sera pas tout pour les nouveautés prévues dans SQLite 3.25. En plus de quelques corrections de bogues, un changement dans le moteur de base de données léger va se traduire par une concurrence légèrement meilleure dans les environnements multithread. On peut aussi citer une amélioration de la commande PRAGMA integrity_check pour une meilleure détection des problèmes sur la page freelist. Rappelons en effet qu'elle permet d'effectuer un contrôle d'intégrité de la base de données entière, en recherchant divers problèmes.

Sources : Site officiel SQLite, GitHub.

Et vous ?

Utilisez-vous SQLite dans vos développements ?
Quels sont selon vous ses forces et faiblesses ?
Que pensez-vous des nouveautés à venir dans SQLite 3.25 ? Lesquelles estimez-vous les plus utiles ?
Quelles sont vos attentes pour les prochaines versions de SQLite ?

Voir aussi :

SQLite est 35 % plus rapide que le système de fichiers, selon les tests des développeurs du moteur de base de données
La version 3.18 de SQLite est disponible, avec un nouvel identifiant utilisant le hachage SHA3-256 et l'ajout de la commande PRAGMA optimize
Le moteur de base de données SQLite est disponible en version 3.17, avec des améliorations de performance à plusieurs niveaux et trois correctifs
Microsoft : SQLite intègre les fonctionnalités système de Windows 10, pour améliorer l'accès aux données
Un développeur évoque cinq raisons pour vous faire utiliser SQLite en 2016, que pensez-vous de ses arguments ?

Rubrique SGBD, Forum SQLite, Cours et Tutoriels SGBD, FAQ SGBD

Une erreur dans cette actualité ? Signalez-le nous !

Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web