wer.dp_sigs表数据有200w,下面这条语句的查询竟然花了20秒的时间,前提是modifyat与type1都建立了索引,有什么方法能再优化?
select md5, name, tags1 from
wer.dp_sigs where modifyat <= (select modifyat from
wer.dp_sigs where type1=3 order by modifyat desc limit 0,1) and type1=3
order by modifyat desc limit 30之前看过一篇文章的介绍,上面这查询的写法明显比下面这查询语句要快。select md5, name, tags1 from
wer.dp_sigs where type1=3 order by modifyat desc limit 0,30大伙有没有更好的解决方法啊,其实我要的结果就是分页,前提是modifyat必须要排倒序。
select md5, name, tags1 from
wer.dp_sigs where modifyat <= (select modifyat from
wer.dp_sigs where type1=3 order by modifyat desc limit 0,1) and type1=3
order by modifyat desc limit 30之前看过一篇文章的介绍,上面这查询的写法明显比下面这查询语句要快。select md5, name, tags1 from
wer.dp_sigs where type1=3 order by modifyat desc limit 0,30大伙有没有更好的解决方法啊,其实我要的结果就是分页,前提是modifyat必须要排倒序。
select `md5`,
name,
tags1
from wer.dp_sigs
where type1 = 3
order by modifyat desc
limit 30;对应索引:
alter table wer.dp_sigs add key idx_type1_modifyat(type1,modifyat);
add key idx_type1_modifyat(type1,modifyat);
加上这就可以解决
引用 1 楼 yueliangdao0608 的回复:
你中间的子查询根本就没有必要!!
SQL code
select `md5`,
name,
tags1
from wer.dp_sigs
where type1 = 3
order by modifyat desc
limit 30; 对应索引:
alter table wer.dp_sigs add key idx_type1_modifyat(type1,modifyat);
确实没看出中间的子查询有什么必要
索引应该是modifyat打头的联合索引