如何优化这样的查询,在线等!
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又不能去除,如何优化?
[解决办法]
很明显,在time上加聚集索引.
不过这样操作之前,你得慎重考虑一下,对time的查询是否足够频繁,如果频繁,那毫不犹豫了.否则不要轻易改变表的聚焦索引,试方式
加上非聚焦索引吧.
[解决办法]
查询结果和排序分开写试试行吗。
或者用视图试试。
[解决办法]
--测试一下,有变化没?select a , b , c , dfrom A inner join b on A.a = b.awhere 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
先将结果做成一个结果集,然后再进行排序。
看数据量,总表与结果表大小差别越大,速度差别也就越大。
[解决办法]
从描述上来看主要是排序影响的.
你要按a表的time字段排序,则可以在time字段上面建立一个聚集索引
正好满足你的范围查找且加排序
[解决办法]
1. 你的硬件设施太落后了 才这点数据就这样了
2.加time 索引
[解决办法]
两个a字段有无索引?无的话增加下
[解决办法]
两个a字段有无索引,无的话增加下。
[解决办法]
如果2008,把time上的索引删除,然后执行
create index IX_a_time on a(time) include(a,b,c,d) --如果这四个字段有些不是A表的,不要这个字段