2012-03-23 15 views
5

Si agrego un índice de texto completo en PostgreSQL, ¿mis consultas LIKE e ILIKE lo usarán automáticamente?¿Agregar un índice de texto completo en PostgreSQL acelerará mis consultas regulares que usan LIKE?

¿Es necesario utilizar la sintaxis especial texto completo con el fin de tomar ventaja de un índice de texto completo en PostgreSQL:

SELECT title, ts_headline(body, query) AS snippet, ts_rank_cd(body_tsv, query, 32) AS rank 
    FROM blog_entry, plainto_tsquery('hello world') AS query 
    WHERE body_tsv @@ query 
    ORDER BY rank DESC; 

Respuesta

7

No, un índice de texto completo no será utilizada por el operador LIKE .

con PostgreSQL 9.1 puede crear un nuevo tipo de índice que acelerará operaciones LIKE incluso si el comodín no es sólo al final de la expresión

http://www.depesz.com/2011/02/19/waiting-for-9-1-faster-likeilike/

+0

Funciona como un encanto. ¡Gracias! –

5

Para ampliar la respuesta de ahwnn, se son comparaciones diferentes y no pueden usar el mismo índice.

La búsqueda de texto completo siempre involucra tokenizar el texto y generalmente implica derivar palabras. Esto dificulta la búsqueda de prefijos exactos y, por lo general, es imposible, p. unir dos espacios en una fila (generalmente se descartan).

Es posible que desee leer también sobre las diversas clases de operador de índice, en particular text_pattern_ops y amigos. Sin esto LIKE 'cab%' no puede optimizarse para> = 'cab' AND < 'cac'.

http://www.postgresql.org/docs/9.1/static/indexes-opclass.html

Cuestiones relacionadas