Ich habe eine Abfrage:Optimieren MySQL Query mit mehreren Indizes
SELECT items.*
FROM items
INNER JOIN other on other.some_key = items.some_key
WHERE
items.partition_id = 7 AND
items.created_date > '2016-01-01 00:00:00' AND
(
other.name like '%user query%' OR
match (fulltext_candidate) against ('+user* +query*' IN BOOLEAN MODE) OR
items.some_varchar like '%user query%'
)
ORDER BY items.created_date
LIMIT 20 OFFSET 0;
ich mehrere Indizes
ALTER TABLE `items` ADD INDEX `partition_id` (`partition_id`)
ALTER TABLE `items` ADD FULLTEXT `fti` (`fulltext_candidate`)
ALTER TABLE `items` ADD INDEX `created_date` (`created_date`)
ALTER TABLE `items` ADD INDEX `some_varchar` (`some_varchar`)
ALTER TABLE `other` ADD INDEX `name` (`name`)
Die Abfrage hinzugefügt ist langsam. Das langsame Abfrageprotokoll zeigt die Abfrage, die alle Zeilen der Elementtabelle durchsucht. Ich glaube, dass MySQL nur einen Index für die Abfrage verwendet. Wenn ich eine reduzierte Abfrage mache, wo ich nur eine Spalte in die WHERE-Klausel einbeziehe, ist die Abfrage sehr schnell.
Wie kann ich einen einzelnen Index erstellen, der diese Abfrage optimiert und sowohl Volltexte als auch normale Indizes verwendet?
Wie langsam ist langsam? Welche Art von Tisch liegst du? Wie lange dauert die Abfrage? –
Eine Abfrage kann über eine Minute dauern. Die Tabelle ist InnoDB. – Dave