select a,b,c,d from A inner join B on A.a=b.a where A.time>='2012-01-01 00:00:00' and A.time<='2012-01-31 23:59:59'
order by A.time desc
查询出得数据量在10万左右,但不加order by速度很快,加了order by几乎等死,A.time是datetime格式,已经加了索引,还是查询很慢,估计查询出的10万条记录正在排序,order by又不能去除,如何优化?
order by A.time desc
查询出得数据量在10万左右,但不加order by速度很快,加了order by几乎等死,A.time是datetime格式,已经加了索引,还是查询很慢,估计查询出的10万条记录正在排序,order by又不能去除,如何优化?
不过这样操作之前,你得慎重考虑一下,对time的查询是否足够频繁,如果频繁,那毫不犹豫了.否则不要轻易改变表的聚焦索引,试方式
加上非聚焦索引吧.
--测试一下,有变化没?
select a ,
b ,
c ,
d
from A
inner join b on A.a = b.a
where A.time between '2012-01-01' and '2012-02-01'
order by A.time desc
Select * From (
select a,b,c,d
from A
inner join B
on A.a=b.a
where A.time>='2012-01-01 00:00:00' and A.time<='2012-01-31 23:59:59'
) as aa
order by aa.time desc先将结果做成一个结果集,然后再进行排序。看数据量,总表与结果表大小差别越大,速度差别也就越大。
正好满足你的范围查找且加排序
2.加time 索引
2。索引加了不过效果还是不理想
3.硬件条件因为是我本机测试所以差了点