SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Índice baseado em expressão SQLite


Resumo :neste tutorial, você aprenderá a usar o índice baseado em expressão SQLite para consultar dados para melhorar o desempenho da consulta, especialmente para as consultas que usam expressão ou função.

Introdução ao índice baseado em expressão SQLite


Quando você cria um índice, geralmente usa uma ou mais colunas em uma tabela. Além dos índices normais, o SQLite permite formar um índice baseado nas expressões envolvidas nas colunas da tabela. Esse tipo de índice é chamado de índice baseado em expressão.

A consulta a seguir seleciona os clientes cujo comprimento da empresa é maior que 10 caracteres.
SELECT customerid,
       company
  FROM customers
 WHERE length(company) > 10
 ORDER BY length(company) DESC;Code language: SQL (Structured Query Language) (sql)

Se você usar o EXPLAIN QUERY PLAN declaração, você descobrirá que o planejador de consultas SQLite teve que escanear todo o customers tabela para retornar o 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)

O planejador de consultas SQLite é um componente de software que determina o melhor algoritmo ou plano de consulta para executar uma instrução SQL. A partir do SQLite versão 3.8.0, o componente do planejador de consultas foi reescrito para rodar mais rápido e gerar melhores planos de consulta. A reescrita é conhecida como planejador de consulta de próxima geração ou NGQP.

Para criar um índice baseado na expressão LENGTH(company) , você usa a seguinte instrução.
CREATE INDEX customers_length_company 
ON customers(LENGTH(company));Code language: SQL (Structured Query Language) (sql)

Agora, se você executar a consulta acima novamente, o SQLite usará o índice da expressão para pesquisar e selecionar os dados, o que é mais rápido.

Como o índice baseado em expressão SQLite funciona


O planejador de consulta SQLite usa o índice baseado em expressão somente quando a expressão, que você especificou no CREATE INDEX instrução, aparece da mesma forma que na cláusula WHERE ou na cláusula ORDER BY.

Por exemplo, no banco de dados de exemplo, temos os invoice_items tabela.

A instrução a seguir cria um índice usando as colunas de preço unitário e quantidade.
CREATE INDEX invoice_line_amount 
ON invoice_items(unitprice*quantity);Code language: SQL (Structured Query Language) (sql)

No entanto, quando você executa a seguinte consulta:
EXPLAIN QUERY PLAN 
SELECT invoicelineid,
       invoiceid, 
       unitprice*quantity
FROM invoice_items
WHERE quantity*unitprice > 10;Code language: SQL (Structured Query Language) (sql)

O planejador de consulta SQLite não usou o índice porque a expressão no CREATE INDEX ( unitprice*quantity ) não é igual ao de WHERE cláusula (quantidade * preço unitário)

Restrição de índice baseada em expressão SQLite


O seguinte lista todas as restrições na expressão que aparece no CREATE INDEX demonstração.
  1. A expressão deve se referir apenas às colunas da tabela que está sendo indexada. Ele não pode fazer referência às colunas de outras tabelas.
  2. A expressão só pode usar a chamada de função determinística.
  3. A expressão não pode usar uma subconsulta.

Neste tutorial, você aprendeu como usar o índice baseado em expressão SQLite para melhorar o desempenho da consulta.