我希望能够减少一个mysql count查询的加载时间,目前这个查询需要2.5秒的时间。查询中所有列都有索引。
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可能是正确的 - 第二个查询中的LIMIT
可能会过滤掉第一个查询中需要的大部分工作。 - evanLIMIT
子句并发布查询时间。使用SELECT SQL_NO_CACHE <rest of your query>
从方程式中删除缓存。 - Salman A