SQL优化
count优化
count(*)主键优化,只适用于主键的查询,即使是索引列,效果也不是太好,反而会变慢
SELECT COUNT(*) FROM vote_record_memory WHERE id>10000
优化为
SELECT(SELECT COUNT() FROM vote_record_memory)-COUNT() FROM vote_record_memory WHERE id<10000
先查找id小于10000的列,然后用总数量减去一下
查找不同值的数量
select count(*) from vote_record_memory where vote_id = 0 or vote_id = 1
会显示总和,但是没有详细的区分开来,可以将这SQL拆分,这样效率更快一点
也可以,但是这样会慢几百倍,所以如果将上面的SQL拆分为两个,效率是相当大的
SELECT COUNT(vote_id=0 OR NULL) AS vo1 , COUNT(vote_id = 1 OR NULL) AS vo2 FROM vote_record_memory
优化分页
select id,user_id,vote_id from vote_record_memory order by user_id limit 50,100000
可以优化为
SELECT id,user_id,vote_id FROM vote_record_memory
INNER JOIN(SELECT user_id FROM vote_record_memory ORDER BY user_id LIMIT 50,100000)
AS lim USING(user_id)
从INNER JOIN开始查找排序的字段,排序排序的字段,as lim USING排序的字段,as必不可少,也可以是as lims等,可以快出4-5倍,但是排序结果与原先的排序结果有所不同,但是仍然是这些字段,也有排序,只不过分割了