2011-07-14 12 views
10

sto usando un semplice mysql come espressione di ricerca come questa:
SELECT * FROM myTable WHERE field LIKE 'aaa%' ORDER BY field2mysql come% query è lenta con indice full-text

Ho un indice full-text sul "campo", ed ancora è molto lento. Ho capito che esiste un'opzione per utilizzare la corrispondenza. Qual è la differenza? Come? Qual è l'approccio migliore per il mio utilizzo? Avviso Sto utilizzando il "%" per tutto ciò che inizia con "aaa"

UPDATE: Ho finito per usare qualcosa di simile: 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 che vorrei cambiare, è non è dovuto l'ordine prima da parte di SCORE e poi dal mio campo di popolarità, e invece ordine da una semplice funzione di peso, qualcosa come 0.5 * SCORE + 0.5 * popolarità. Come?

risposta

10

LIKE non utilizza l'indice di testo completo. Per utilizzare l'indice full-text, è necessario utilizzare la corrispondenza (come hai detto):

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

Il MySQL Manual ha un ampio capitolo sulla Full-Text Search Functions.

+0

Interessante .. Qualcuno ha query equivalenti per DB2 o sybase? Google non è di grande aiuto. – user606723

+0

@ user606723 dai un'occhiata a questo articolo: [Ricerca full-text con DB2 Text Search] (http://www.ibm.com/developerworks/data/tutorials/dm-0810shettar/index.html) – Jacob

+0

Ho aggiornato la mia domanda con un "ordine per". Come posso aggiungerlo? – Noam

Problemi correlati