私は、クエリを持っている:最適化MySQLのクエリ
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;
私は、クエリが遅い複数のインデックスに
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`)
を追加しました。低速クエリログには、itemsテーブルのすべての行をスキャンするクエリが表示されます。私は、MySQLがクエリで1つのインデックスしか使用していないと考えています。 WHERE句に1つの列のみを含める縮小クエリを実行すると、クエリは非常に高速です。
フルテキストインデックスと通常インデックスの両方を使用してこのクエリを最適化する単一のインデックスを作成するにはどうすればよいですか?
どのように遅いですか?どのような種類のテーブルを実行していますか?クエリはどのくらい時間がかかりますか? –
クエリは1分以上かかる可能性があります。テーブルはInnoDBです。 – Dave