首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么优化这样的查询,

2012-03-12 
如何优化这样的查询,在线等!select a,b,c,d from A inner join B on A.ab.a where A.time2012-01-01 0

如何优化这样的查询,在线等!
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的查询是否足够频繁,如果频繁,那毫不犹豫了.否则不要轻易改变表的聚焦索引,试方式
加上非聚焦索引吧.
[解决办法]
查询结果和排序分开写试试行吗。

或者用视图试试。
[解决办法]

SQL code
--测试一下,有变化没?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上的索引删除,然后执行

SQL code
create index IX_a_time on a(time) include(a,b,c,d) --如果这四个字段有些不是A表的,不要这个字段 

热点排行