2012-04-15 14 views
1

ich diese Abfrage bin mit aber leider funktioniert es langsam:Volltext: diese Abfrage sehr langsam

SELECT *, 
    (MATCH(`title`) AGAINST ('$word' IN BOOLEAN MODE) * 2 
    + MATCH(`content`) AGAINST ('$word' IN BOOLEAN MODE) * 2 
    + MATCH(`url`) AGAINST ('$word' IN BOOLEAN MODE) * 1.1 
    + MATCH(`desc`) AGAINST ('$word' IN BOOLEAN MODE) * 1.2) * `like` 
    AS score 
FROM `data` 
WHERE MATCH(`content`,`desc`,`title`,`url`) AGAINST ('$word' IN BOOLEAN MODE) 
ORDER BY `score` DESC LIMIT 1000 

das Ergebnis der Datenbank ist 15000. es bedeutet, dass 15.000 Datensätze haben werden, aber es dauert ca. 25sec Zeit für Abfrage. Ich benutze PDO.

+2

Was ist mit spezialisierten Volltext-Suchmaschinen? Sphinx zum Beispiel. –

+2

Bitte formatieren Sie Ihre Anfrage richtig. Es gibt eine lange horizontale Bildlaufleiste. – Lion

+0

Bitte Tabellenstruktur speziell mit Indizes angeben, btw SELECT * ist nie eine gute Idee! – worenga

Antwort

0

Sie werden FULLTEXT-Indizes benötigen, andernfalls muss das DBMS die gesamte Tabelle jedes Mal durchsuchen. Dies verlangsamt das Einfügen von Datensätzen. Beachten Sie, dass eine Volltextsuche in 4 Spalten immer relativ langsam ist.

CREATE FULLTEXT INDEX indexTitle ON `data` (title) 
CREATE FULLTEXT INDEX indexContent ON `data` (content) 
CREATE FULLTEXT INDEX indexURL ON `data` (url) 
CREATE FULLTEXT INDEX indexDesc ON `data` (desc) 
CREATE FULLTEXT INDEX combinedIndex ON `data` (content, desc, title, url)