を数え、私は次のテーブルを持つデータベースがあります。によってグループにMySQLのクエリが非常に遅く、
病院(〜28K行)、 検査(〜116K行)、 問題(〜290K行)
を病院には検査があり、検査には0件以上の問題があります。私は、次のクエリを持っている:私は期待し得る
SELECT count(*) as count, BName, BCity, BAddress, BState, BZip, Ins_date, BCountry, Ins_Type
FROM (SELECT b.id as ID, b.hospital_name as BName, b.city as BCity, b.address as BAddress, b.country as BCountry, b.state as BState, b.zip as
BPostal, i.date as Ins_date, v.type as Ins_Type
FROM hospital_table b, inspection_table i, issue_table v
WHERE b.id = i.business_id
AND i.id = v.inspection_id
ORDER BY b.hospital_name, i.date DESC) AS sumissues
GROUP BY ID
ORDER BY count DESC;
出力は次のようになります。
112 | Burnaby Memorial | Burnaby | 3935 Kincaid St | BC | 2017-07-19 | Canada | Cleanliness
問題は、それが実行に40secondsほどかかります。私は外部キーとinspection_table.dateのインデックスを持っています。どのように私はこれを最適化することができますか?あなたのコード
に副選択が
SELECT
count(*) as count
, b.hospital_name as BName
, b.city as BCity
, b.address as BAddress
, b.country as BCountry
, b.state as BState
, b.zip as BPostal
, i.date as Ins_date
, v.type as Ins_Type
FROM hospital_table b
INNER JOIN inspection_table i ON b.id = i.business_id
INNER JOIN issue_table v ON i.id = v.inspection_id
GROUP BY b.id
ORDER BY count DESC, b.hospital_name, i.date
を必要しかし、このために@User_by_Already
によってcommenteに何のために気をつけていません必要ない副選択でも順を探し
なぜ内側のクエリでオーダするのですか?ORDER BY b.hospital_name、i.date DESC' ??私はこれが不要だと思う。ただそれを取り出してもう一度試してみてください。 –
何を数えようとしていますか? 1日あたりの検査はいつもですか?病院あたりの問題の数は?他に何か?病院ごとに1つの列が出力として期待されますか?あなたの質問は、厳密な答えを提供するのに十分詳細です。 –
クエリーで説明を実行し、より良い回答を得るのに役立つ結果を掲載できますか? https://dev.mysql.com/doc/refman/5.7/en/explain.html – Aknosis