表1からすべての行を一致検索行は:トラックのMySQL - 結合テーブル
表2:ワードリスト
表3:N:Mトラック
は持っているすべてのトラックを検索する単語(trackwords)を有していますすべての言葉。すべてのインデックスを使用しているEXPLAINに従って
SELECT DISTINCT t.id FROM track as t
Left Join trackwords as tw ON t.id=tw.trackid
Left Join wordlist as wl on wl.id=tw.wordid
WHERE
wl.trackusecount>0
group by t.id
HAVING SUM(IF(wl.word IN ('folsom','prison','blues'),1,0)) = 3;
がneccessary:
+----+-------------+-------+--------+-----------------------+---------+---------+----------------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-----------------------+---------+---------+----------------+---------+-------------+
| 1 | SIMPLE | t | index | PRIMARY | PRIMARY | 4 | NULL | 8194507 | Using index |
| 1 | SIMPLE | tw | ref | wordid,trackid | trackid | 4 | mbdb.t.id | 3 | Using where |
| 1 | SIMPLE | wl | eq_ref | PRIMARY,trackusecount | PRIMARY | 4 | mbdb.tw.wordid | 1 | Using where |
+----+-------------+-------+--------+-----------------------+---------+---------+----------------+---------+-------------+
をしかし、クエリは、年齢を取る
は現在、クエリは次のようになります。 クエリを高速化するための提案はありますか?
非常にいいリンク、本当にありがとう、ありがとう。 – Rufinus
リンクが既に死んでいることを除いて。 –
新しいリンクが見つかりました。 – Rufinus