以下は私が使用しているクエリです:
SELECT *
FROM (
SELECT
(
CASE WHEN product_name like '%word1%' THEN 1 ELSE 0 END +
CASE WHEN product_name like '%word2%' THEN 1 ELSE 0 END +
CASE WHEN product_name like '%word3%' THEN 1 ELSE 0 END
) AS numMatches
FROM products as p
) as derived
WHERE numMatches > 0
ORDER BY numMatches DESC
LIMIT 30,10
product_nameにインデックス(BTREE)を追加しました。列には、300万件のレコードがあり、クエリは3〜5秒で実行されます。
説明は言う 'どこを使用して; filesortを使用しているので、インデックスを使用していないことがわかります。
いいえ、インデックスを使用していません。
そのためには、「word1%」、「word2%」などと比較する必要がありますが、最初にジョーカーを使用すると機能しません。
ただし、mysqlのバージョンが比較的新しい場合は、クエリに役立つフルテキストインデックスを使用できます。
https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加