10 秒以上実行されるこの遅いクエリに問題があります。
SELECT DISTINCT siteid,
storyid,
added,
title,
subscore1,
subscore2,
subscore3,
( 1 * subscore1 + 0.8 * subscore2 + 0.1 * subscore3 ) AS score
FROM articles
WHERE added > '2011-10-23 09:10:19'
AND ( articles.feedid IN (SELECT userfeeds.siteid
FROM userfeeds
WHERE userfeeds.userid = '1234')
OR ( articles.title REGEXP '[[:<:]]keyword1[[:>:]]' = 1
OR articles.title REGEXP '[[:<:]]keyword2[[:>:]]' = 1 ) )
ORDER BY score DESC
LIMIT 0, 25
これにより、ユーザーが自分のアカウントに追加したサイトに基づいて記事のリストが出力されます。ランキングは、サブスコア列から構成されるスコアによって決定されます。
クエリは filesort を使用し、PRIMARY と feedid のインデックスを使用します。EXPLAIN の結果:
1 PRIMARY articles
range
PRIMARY,added,storyid
PRIMARY 729263 rows
Using where; Using filesort
2 DEPENDENT SUBQUERY
userfeeds
index_subquery storyid,userid,siteid_storyid
siteid func
1 row
Using where
このクエリを改善するための提案はありますか? ありがとうございました。