我想从2.5秒为mysql计数查询减少加载时间。查询中的所有列都有一个索引。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可能是正确的 - 第二个查询中的“LIMIT”可能会过滤第一个查询中所需的大量工作。 – evan 2012-02-07 22:28:02
从第二个查询中删除“LIMIT”子句并发布查询时间。使用'SELECT SQL_NO_CACHE <查询的其余部分>'从等式中删除缓存。 – 2012-02-07 22:40:47
从第二个查询中删除限制导致查询时间为7.6967690秒。 – user1195817 2012-02-07 22:53:19