私たちの Web サイトの 1 つに、約 60,000 レコードを含むテーブルがあります。最近、ページがタイムアウトしていることに気付きました。これを解決するには、メモリ制限を -1 に設定する必要があります。これにより、ページの読み込みが可能になりましたが、非常に遅くなりました。さらに、明らかに何かが正しくないことを示しているため、これが問題を解決する正しい方法だとは思いませんでした。
ページが実行していたクエリを出力できました。
SELECT u.*,
(SELECT COUNT(*) FROM enquiry e WHERE e.user_id = u.id AND e.deleted = 0 AND e.time_started != 0) AS opened_count,
(SELECT COUNT(*) FROM enquiry e WHERE e.user_id = u.id AND e.deleted = 0 AND e.confirmed = 1 AND e.time_started != 0) AS confirmed_count,
(SELECT COUNT(*) FROM enquiry e WHERE e.user_id = u.id AND e.deleted = 0 AND e.call_back = 1 AND e.time_started != 0) AS call_back_count
FROM user u
WHERE u.active = 1 AND u.deleted = 0
ORDER BY u.username
このクエリを phpMyAdmin で実行したところ、結果が返されるまでに 30 秒以上かかりました。
何らかの方法でクエリを最適化する必要があると感じていますが、その方法を見つけるのに苦労しています。何らかのJOINを使用する必要があると思いますか?