実行時に数時間実行され、最終的にサーバーがタイムアウトするというクエリがあります。サブ・セレクト・アンド・ジョイン・クエリでハングする
SELECT l.mloc_id, COUNT(l.tabc_id) , l.tabc_id, e.establishment_id, e.name, l.LocationName, l.naics, l.cuisine, l.cuisine2, l.service, l.www, l.owner, l.email, l.status
FROM vg_ydrink2.m_loc AS l
JOIN vg_ydk.permit_beverage AS pb ON (l.tabc_id = pb.permit_code
AND pb.create_date = (
SELECT MAX(create_date)
FROM vg_ydk.permit_beverage
WHERE permit_code = l.tabc_id))
JOIN vg_ydk.establishment AS e ON (pb.establishment_id = e.establishment_id)
GROUP BY l.mloc_id
ORDER BY `l`.`tabc_id` ASC
LIMIT 1 , 30
エラーは報告されていません。それは決して完了しません。
サブセレクションに問題があるのは、サブセレクションを削除するときに問合せが問題なく実行されるためです。私はサブクエリを残してみましたが、MAXを取り除いてみたところ、どちらもうまくいきませんでしたので、問題を引き起こしているのはグループの機能だとは思っていません。
どのような考えですか? ありがとうございます。
***編集:create_dateインデックスで少しプレイした後、その値の性質上、カーディナリティは常に低くなっています。そのため、クエリでインデックスとして扱われず、結果として、あまりにも多くの行が常にロードされます。 以来、私はクエリを変更したので、これはもう問題ではありません。誰かが同様の問題に遭遇した場合は、使用されているフィールドが適切に索引付けされていることを確認してください。必要に応じてテーブルを分析/最適化/修復します。
M.
スマートクエリは、ありがとうございました。しかし、それは同じ効果を持っているようです。 :S – Menelaos
私はこの回答を選択するために省略したことを知りました。 その間に私のクエリの性質が変わったのですが、この答えはそのようなネストされた選択状況のための良い、きれいなオプションです。 – Menelaos