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つのテーブルすべてに対してこれを繰り返します。