このコードを実行すると問題が発生します。
SELECT * FROM tblpm n
WHERE date_updated=(SELECT MAX(date_updated)
FROM tblpm GROUP BY control_number
HAVING control_number=n.control_number)
基本的に、各管理番号の最新の日付を返します。上記のクエリは正しい出力を返しますが、37秒かかります。出力が表示される前。
上記のクエリよりも高速に実行できる他のsql句またはコマンドはありますか?
前もって感謝します。
サブクエリをWHERE句に入れてn.control_numberに制限すると、サブクエリが何度も実行されます。これは、相関サブクエリと呼ばれ、多くの場合、パフォーマンスを低下させます。
FROM句でサブクエリを1回実行して、コントロール番号ごとの最大日付を取得することをお勧めします。
SELECT n.*
FROM tblpm n
INNER JOIN (
SELECT control_number, MAX(date_updated) AS date_updated
FROM tblpm GROUP BY control_number
) AS max USING (control_number, date_updated);
そのサブクエリでグループ化する必要はありません... where句で十分です:
SELECT * FROM tblpm n
WHERE date_updated=(SELECT MAX(date_updated)
FROM tblpm WHERE control_number=n.control_number)
また、「date_updated」列にインデックスがありますか?それは確かに役立ちます。