SQLite
 sql >> Base de données >  >> RDS >> SQLite

Index basé sur des expressions SQLite

Résumé  :dans ce didacticiel, vous apprendrez à utiliser l'index basé sur des expressions SQLite pour interroger des données afin d'améliorer les performances de la requête, en particulier pour les requêtes qui utilisent une expression ou une fonction.

Introduction à l'index basé sur des expressions SQLite

Lorsque vous créez un index, vous utilisez souvent une ou plusieurs colonnes dans une table. Outre les index normaux, SQLite vous permet de former un index basé sur des expressions impliquées dans les colonnes de la table. Ce type d'index est appelé un index basé sur une expression.

La requête suivante sélectionne les clients dont la longueur de l'entreprise est supérieure à 10 caractères.

SELECT customerid,
       company
  FROM customers
 WHERE length(company) > 10
 ORDER BY length(company) DESC;Code language: SQL (Structured Query Language) (sql)

Si vous utilisez le EXPLAIN QUERY PLAN déclaration, vous constaterez que le planificateur de requêtes SQLite a dû analyser l'ensemble des customers table pour renvoyer le jeu de résultats.

EXPLAIN QUERY PLAN
SELECT customerid,
       company
  FROM customers
 WHERE length(company) > 10
 ORDER BY length(company) DESC;Code language: SQL (Structured Query Language) (sql)

Le planificateur de requêtes SQLite est un composant logiciel qui détermine le meilleur algorithme ou plan de requête pour exécuter une instruction SQL. À partir de la version 3.8.0 de SQLite, le composant du planificateur de requêtes a été réécrit pour s'exécuter plus rapidement et générer de meilleurs plans de requête. La réécriture est connue sous le nom de planificateur de requêtes de nouvelle génération ou NGQP.

Pour créer un index basé sur l'expression LENGTH(company) , vous utilisez l'instruction suivante.

CREATE INDEX customers_length_company 
ON customers(LENGTH(company));Code language: SQL (Structured Query Language) (sql)

Maintenant, si vous exécutez à nouveau la requête ci-dessus, SQLite utilisera l'index d'expression pour rechercher et sélectionner les données, ce qui est plus rapide.

Fonctionnement de l'index basé sur des expressions SQLite

Le planificateur de requêtes SQLite utilise l'index basé sur l'expression uniquement lorsque l'expression que vous avez spécifiée dans le CREATE INDEX , apparaît comme dans la clause WHERE ou la clause ORDER BY.

Par exemple, dans l'exemple de base de données, nous avons les invoice_items tableau.

L'instruction suivante crée un index à l'aide des colonnes de prix unitaire et de quantité.

CREATE INDEX invoice_line_amount 
ON invoice_items(unitprice*quantity);Code language: SQL (Structured Query Language) (sql)

Cependant, lorsque vous exécutez la requête suivante :

EXPLAIN QUERY PLAN 
SELECT invoicelineid,
       invoiceid, 
       unitprice*quantity
FROM invoice_items
WHERE quantity*unitprice > 10;Code language: SQL (Structured Query Language) (sql)

Le planificateur de requêtes SQLite n'a pas utilisé l'index car l'expression dans le CREATE INDEX ( unitprice*quantity ) n'est pas le même que celui du WHERE clause (quantité*prix unitaire)

Restriction d'index basée sur l'expression SQLite

La liste suivante répertorie toutes les restrictions sur l'expression qui apparaît dans le CREATE INDEX déclaration.

  1. L'expression doit faire référence aux colonnes de la table qui est indexée uniquement. Il ne peut pas faire référence aux colonnes d'autres tables.
  2. L'expression ne peut utiliser que l'appel de fonction déterministe.
  3. L'expression ne peut pas utiliser de sous-requête.

Dans ce didacticiel, vous avez appris à utiliser l'index basé sur l'expression SQLite pour améliorer les performances des requêtes.