table article{
id:BIGINT(20)
name:VARCHAR(20),
state:TINYINT(1);//状态,0、正常,1、删除
...,
is_top:TINYINT(1),//是否置顶
theme:INT,//主题
}
有这样一个需求:
查询article列表,排序优先级,置顶、主题相同、id(从大到小)。
现在写的sql:
SELECT id
FROM article
WHERE state=0
ORDER BY is_top DESC,theme=1 DESC,id DESC LIMIT 0,10
查看执行计划
请教如何优化?
你这个查询没有条件过滤的吗?接近20W数据就这样查肯定有问题的呀!先把条件写上再看执行计划!
mysql尽量将其当做存储引擎来做,不要当做搜索引擎。
你的这个case尝试去做一些优化。
可以优化点
1:将置顶部分单独拎出来。用一个单独的sql去查置顶的article,这部分可以采用缓存,可以节省大量响应时间
2:id字段作为primary key
3:state字段添加index
4:theme字段添加index
通过上面优化步骤后,你再试试