2011-07-14 7 views
10

estoy usando un MySQL simples como consulta como esta:
SELECT * FROM myTable WHERE field LIKE 'aaa%' ORDER BY field2MySQL como% de consultas es lento, con un índice de texto

que tienen un índice de texto completo en el "campo", y todavía es muy lento. Entendí que hay una opción para usar match. ¿Cuál es la diferencia? ¿Cómo? ¿Cuál es el mejor enfoque para mi uso? Aviso estoy usando el "%" por todo lo que empieza con "AAA"

ACTUALIZACIÓN: he terminado de usar algo como esto: SELECT
*, MATCH (name) AGAINST ('a*' IN BOOLEAN MODE) AS SCORE
FROM
users WHERE
MATCH (name) AGAINST ('a*' IN BOOLEAN MODE)
ORDER BY SCORE, popularity DESC LIMIT 4

Una cosa que me gustaría cambiar, es no se debe al orden por parte de SCORE y luego por mi popularidad en el campo, y en su lugar ordena por una función de peso simple, algo así como 0.5 * SCORE + 0.5 * popularidad. ¿Cómo?

Respuesta

10

LIKE no utiliza el índice de texto completo. Para hacer uso del índice de texto completo, usted tiene que usar partido (como usted ha dicho):

SELECT * 
FROM myTable 
WHERE MATCH(field) AGAINST ('aaa*' IN BOOLEAN MODE) 
ORDER BY field2 

El MySQL Manual tiene un amplio capítulo sobre Full-Text Search Functions.

+0

Interesante ... ¿Alguien tiene alguna consulta equivalente para DB2 o sybase? Google no está siendo de mucha ayuda. – user606723

+0

@ user606723 eche un vistazo a este artículo: [Búsqueda de texto completo con DB2 Text Search] (http://www.ibm.com/developerworks/data/tutorials/dm-0810shettar/index.html) – Jacob

+0

He actualizado mi consulta con un "orden por". ¿Cómo puedo agregar eso? – Noam

Cuestiones relacionadas