mysqlのカウントクエリでは、ロード時間を2.5秒から短縮したいと考えています。クエリのすべての列にはインデックスがあります。MySQLカウントの最適化
SELECT COUNT(1)
FROM song AS s
JOIN song_text AS st
ON(st.song_id = s.song_id)
JOIN phpfox_user AS u
ON(u.user_id = s.user_id)
WHERE st.lyrics LIKE '%a%' AND s.is_active = 1 AND s.public = 1
返される行を取得するクエリは、0.0009060秒で読み込まれます。
SELECT s.*, st.lyrics, u.first_name
FROM song AS s
JOIN song_text AS st
ON(st.song_id = s.song_id)
JOIN phpfox_user AS u
ON(u.user_id = s.user_id)
WHERE st.lyrics LIKE '%a%' AND s.is_active = 1 AND s.public = 1
ORDER BY s.date_added DESC
LIMIT 12
なぜカウントクエリには、ローを返すクエリよりもかなり多くの読み込み時間がありますか?カウントクエリの読み込み時間を他のクエリと同様のものにするために何ができるのですか?
クエリで 'EXPLAIN'を実行しようとしましたか?これはあなたに洞察を与えるはずです。私は@AdityaNaiduが正しいかもしれないと信じています - 第2のクエリの 'LIMIT'は最初のクエリに必要な多くの作業をフィルタリングしているかもしれません。 – evan
2番目のクエリから 'LIMIT'句を削除し、クエリ時間をポストします。方程式からキャッシュを削除するには、 'SELECT SQL_NO_CACHE <残りのクエリ> 'を使います。 –
2番目のクエリから制限を削除すると、クエリ時間は7.6967690秒になりました。 – user1195817