Artigo SQL Magazine 52 - Garantindo desempenho com o operador LIKE

Artigo da Revista SQL Magazine edição 52.

Esse artigo faz parte da revista SQL Magazine edição 52. Clique aqui para ler todos os artigos desta edição

Neste artigo serão abordadas técnicas para garantir um bom desempenho no PostgreSQL mesmo quando o operador LIKE é utilizado. Este recurso padrão do SQL, tão utilizado por desenvolvedores e ao mesmo tempo temido por DBAs, precisa de certos ajustes no SGBD para não se tornar um pesadelo em ambientes de médio e grande porte.

O operador LIKE e suas deficiências

O operador lógico LIKE, introduzido no padrão SQL92, é um poderoso artifício para comparação de textos em bancos de dados relacionais. Com o operador, podem ser utilizados os caracteres “%” (percentagem) e “_” (underline), os quais têm significados especiais quando ocorrem na expressão a ser testada. O “%” indica que um ou mais caracteres podem aparecer no texto. Já o “_” representa um único caractere qualquer no texto, e não será tratado neste artigo.

Por exemplo, para buscarmos registros cujo nome começa com “JOSE”, usamos a expressão “JOSE %”. Para filtrarmos os nomes que finalizam com “FILHO”, usamos “% FILHO”. E para listar os que possuem “CARLOS” no meio do nome, usamos a expressão “% CARLOS %”.

Na Figura 1 são exibidas as instruções SQL para criação da tabela PESSOAS que será utilizada nos testes de busca neste estudo. A coluna “nome”, de tipo textual, será considerada nestas comparações. A codificação do banco de dados em questão é a LATIN1, a mais adequada para trabalhar com textos no idioma português do Brasil (ISO-8859-1). Para fazer tal tarefa, utilizaremos a ferramenta pgAdmin III, porém partiremos do principio que esta já está em funcionamento. Sendo assim, no pgAdmin III abra o menu Tools ? Query e execute a instrução SQL conforme ilustrado na Figura 1.

 

Figura 1. Script para criação da tabela PESSOA para testes.

 

Para que o objetivo principal deste estudo seja alcançado, é preciso que a tabela possua uma quantidade razoável de linhas. Para a elaboração deste artigo, foi utilizada base de dados de pessoas com cerca de 10,5 milhões de registros. Tendo poucas linhas, o planejador (planner) do PostgreSQL sempre efetuará leituras seqüenciais (full scans) na tabela, por esta ser a opção menos custosa nessa situação.

As diversas situações para o emprego do operador LIKE serão exploradas nas seções seguintes, a começar do caso em que o caractere “%” aparece ao final da expressão.

Primeiro caso: “%” ao final

Na primeira situação, consideremos uma típica busca parcial de nome: todos os registros que comecem com “JOSE CARLOS”, ou seja, quando o usuário não tem conhecimento ou certeza do sobrenome desejado. Na Listagem 1 temos a instrução SQL correspondente a este exemplo.

 

Listagem 1. Busca com operador LIKE e caractere % ao final.

SELECT *

FROM pessoas

WHERE nome LIKE 'JOSE CARLOS %';

 

Para analisarmos o plano de execuções de uma consulta SQL, ou seja, os caminhos computacionais que o SGBD fará para atender à instrução, utilizamos a cláusula EXPLAIN (específica do PostgreSQL) antes desta última. A saída contém informações úteis para o DBA, como número de linhas esperada, custo aproximado da instrução para o servidor, abordagens de junções, utilização de índices, entre outras coisas. Desta forma, a instrução não chega a ser executada no servidor, apenas o plano é montado e exibido. Para mostrar o plano e executar definitivamente a instrução SQL é preciso usar a cláusula EXPLAIN ANALYZE, como ilustrado na " [...] continue lendo...

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados