sql >> Base de Datos >  >> RDS >> SQLite

Índice basado en expresiones de SQLite

Resumen :en este tutorial, aprenderá a usar el índice basado en expresiones de SQLite para consultar datos y mejorar el rendimiento de las consultas, especialmente para las consultas que usan expresiones o funciones.

Introducción al índice basado en expresiones de SQLite

Cuando crea un índice, a menudo usa una o más columnas en una tabla. Además de los índices normales, SQLite le permite formar un índice basado en las expresiones de las columnas de la tabla. Este tipo de índice se denomina índice basado en expresiones.

La siguiente consulta selecciona los clientes cuya longitud de la empresa es mayor a 10 caracteres.

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

Si utiliza el EXPLAIN QUERY PLAN declaración, encontrará que el planificador de consultas de SQLite tuvo que escanear todos los customers tabla para devolver el conjunto de resultados.

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

El planificador de consultas de SQLite es un componente de software que determina el mejor algoritmo o plan de consultas para ejecutar una instrucción SQL. A partir de la versión 3.8.0 de SQLite, el componente del planificador de consultas se reescribió para ejecutarse más rápido y generar mejores planes de consulta. La reescritura se conoce como el planificador de consultas de próxima generación o NGQP.

Para crear un índice basado en la expresión LENGTH(company) , utiliza la siguiente declaración.

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

Ahora, si vuelve a ejecutar la consulta anterior, SQLite usará el índice de expresión para buscar y seleccionar los datos, que es más rápido.

Cómo funciona el índice basado en expresiones de SQLite

El planificador de consultas de SQLite usa el índice basado en expresiones solo cuando la expresión, que especificó en CREATE INDEX instrucción, aparece igual que en la cláusula WHERE o en la cláusula ORDER BY.

Por ejemplo, en la base de datos de ejemplo, tenemos invoice_items mesa.

La siguiente declaración crea un índice usando las columnas de precio unitario y cantidad.

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

Sin embargo, cuando ejecuta la siguiente consulta:

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

El planificador de consultas de SQLite no usó el índice porque la expresión en CREATE INDEX ( unitprice*quantity ) no es el mismo que el del WHERE cláusula (cantidad*precio unitario)

Restricción de índice basada en expresiones SQLite

A continuación se enumeran todas las restricciones sobre la expresión que aparece en CREATE INDEX declaración.

  1. La expresión debe hacer referencia únicamente a las columnas de la tabla que se indexa. No puede hacer referencia a las columnas de otras tablas.
  2. La expresión solo puede usar la llamada de función determinista.
  3. La expresión no puede usar una subconsulta.

En este tutorial, ha aprendido a usar el índice basado en expresiones de SQLite para mejorar el rendimiento de las consultas.