EXPLAIN EXTENDEDをご覧ください 言う。
DEPENDENT SUBQUERYと表示されている場合 またはUNCACHEABLE SUBQUERY 、使用するたびに再評価されます。
これは、サブクエリがセッション変数を使用する場合、または相関サブクエリである場合に発生します。
そうでない場合は、おそらくキャッシュされます。
ケースがキャッシュされない場合は、各UNIONで再評価されます。 'edset。
ただし、サブクエリは複雑すぎるようです。使ってみませんか:
SELECT id
FROM playlist_program_map ppm, programs p
WHERE ppm.playlist_id = 181
AND p.id = ppm.program_id
AND submitter_id = 32
AND feed_id = 2478
playlist_program_map (playlist_id)にインデックスがある場合 、このクエリは魅力のように機能するはずです。
もう2つ教えてください:
-
playlist_program_mapには行がいくつありますかDISTINCT playlist_idの数 値はありますか?programsには行がいくつありますかDISTINCT submitter_id, feed_idの数 ペアはありますか?
あなたのコメントから、 10があると結論付けることができます programs playlistごと 平均して、 200 programs (submitter, feed)ごと ペア。これは、playlist_program_mapのインデックスを意味します (submitter, feed)のものよりも選択的です 、およびplaylist_program_map 参加をリードする必要があります。
10 に参加する必要があることを考えると、あなたの場合の全文索引もあまり選択的ではないようです。 2,000,000のプログラム 。
次のことを試してみてください:
SELECT object_id, programs.created AS created
FROM playlist_program_map ppm, programs p, comments_programs cp
WHERE ppm.playlist_id = 181
AND p.id = ppm.program_id
AND p.submitter_id = 32
AND p.feed_id = 2478
AND cp.object_id = p.id
AND cp.text REGEXP 'excellent'
、3つのテーブルすべてに対してこれを繰り返します。