2013-05-22 20 views
6

Ich habe eine Tabelle mit 14 Millionen Zeilen und ich versuche, eine Volltextsuche für diese Tabelle durchzuführen. Die Abfrage dafür ist sehr langsam, es dauert etwa 9 Sekunden für eine einfache binäre AND Abfrage. Das gleiche Zeug wird sofort auf meinem privaten Cluster ausgeführt. Die Größe dieser Tabelle beträgt ca. 3,1 GB und enthält 14 Millionen Zeilen. Kann jemand dieses Verhalten der RDS-Instanz erklären?MySQL Volltextsuche extrem langsam auf einer AWS RDS große Instanz

SELECT count(*) 
FROM table_name WHERE id=97 
AND match(body) against ('+data +big' IN BOOLEAN MODE) 
+0

bitte posten Sie die Frage – Stephan

+0

Können Sie den Ausführungsplan in beiden Umgebungen vergleichen? Bitte posten Sie beide, wenn sie unterschiedlich sind. – RandomSeed

+0

'SELECT Explain' zeigt das gleiche Zeug auf beiden Maschinen. – user883499

Antwort

3

Eine hohe IO-Rate weist oft auf unzureichenden Speicher oder zu kleine Puffer hin. Eine 3-GB-Tabelle, einschließlich Indizes, sollte vollständig in den Speicher eines dedizierten Servers (viel weniger als 500 US-Dollar pro Monat) passen.

MySQL hat viele verschiedene Puffer, und als many parameters mit giddle. Die folgenden Puffer sind die wichtigsten, zu vergleichen, deren Größen in den beiden Umgebungen:

Wenn InnoDB: innodb_buffer_pool_size

Wenn MyISAM: key_buffer_size und read_buffer_size

0

haben Sie FULLTEXT index auf body Spalte hinzugefügt, wenn nicht, dann versuchen diese sicherlich wird es einen großen Unterschied machen

ALTER TABLE `table_name` ADD FULLTEXT INDEX `bodytext` (`body`); 

Hoffe, dass es

+0

Ja, es gibt bereits einen Volltextindex. – user883499

0

Versuchen Sie, diese

SELECT count(1) 
FROM table_name WHERE id=97 
AND match(body) against ('+data +big' IN BOOLEAN MODE) 

hilft Dies sollte es ein wenig beschleunigen, da Sie nicht alle col zählen müssen umns nur die Zeilen.

Können Sie die Erklärung selbst veröffentlichen?

+0

Auch, was ist die minimale Wortlänge? Könnte es sein, dass groß ein Stoppwort ist, so dass es nur nach dem Wort Daten sucht? –

0

Da DB-Version, Tabelle, Indizes und Ausführungspläne identisch sind, müssen Sie Maschinen-/Clusterkonfigurationen vergleichen. Hauptpunkte des Vergleichs CPU-Leistung zur Verfügung, Kerne in Einzeltransaktion, Speicher Lesegeschwindigkeit, Speichergröße und Lesegeschwindigkeit/Frequenz verwendet. Ich kann sehen, Amazon bietet eine Vielzahl von Konfigurationen, so dass Sie vielleicht private Cluster ist viel leistungsfähiger als Amazon RDS-Instanz-Konfiguration.

Sie können die Last zwischen CPU, IO und Speicher erhöhen, um den Durchsatz zu erhöhen.

0

Mit match() gegen() Sie führen Sie Ihre Forschung über Ihr gesamter 3GB-Volltextindex und es gibt keine Möglichkeit, in diesem Fall einen anderen Index zu erzwingen.

Ihre Anfrage Sie Ihre Volltext-Index leichter machen müssen, um zu beschleunigen, um so können Sie:

1 - reinigen alle nutzlos Zeichen und Stoppwörter aus dem Volltextindex

2 - mehrere Volltextindizes und Peek erstellen die passende

3 - ändern Volltextsuchen zu LIKE-Klausel und erzwingen einen anderen Index wie "ID".

0

Versuchen id im Text Zeige- und sagen:

match (BODY, ID) gegen (+ big + Daten +97) und id = 97

Sie auch bei Sphinx aussehen könnte, die sein kann verwendet mit mysql leicht.

Verwandte Themen