首页 新闻 会员 周边

非常简单奇怪的SQL错误。。请高手帮忙看看了

0
悬赏园豆:5 [已解决问题] 解决于 2012-03-24 15:53

select top 10 *  from V_data where TypeID=1

and ID not in (select top 20 ID from V_data where TypeID=1  order by AddDate desc) 

order by AddDate desc

 

上面sql语句黑字部分正常执行,但加上红字部分后,就总是超时,数据表就2W的数据。。这是咋回事啊。。。。

East神奇的主页 East神奇 | 初学一级 | 园豆:21
提问于:2012-03-18 18:00
< >
分享
最佳答案
0

首先,该分页语句不是很通用。性能较差。

其次,order by用在非索引字段上导致耗时较长。可以看一下执行计划,最后排序消耗的占用比例是多少。

AddDate上加上索引应该会有所改善。

可以先试一下

select top 10 *  from V_data order by  AddDate asc

看看执行时间。

收获园豆:5
lucika.zh | 初学一级 |园豆:62 | 2012-03-19 10:16
其他回答(5)
0

AddDate建立索引了吗?

dudu | 园豆:30994 (高人七级) | 2012-03-18 18:06

没有

支持(0) 反对(0) East神奇 | 园豆:21 (初学一级) | 2012-03-18 18:29

我把 order by AddDate desc,改成 order by ID desc,也是超时

支持(0) 反对(0) East神奇 | 园豆:21 (初学一级) | 2012-03-18 18:35

@East神奇: 看一下执行计划

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-03-18 20:04
0

select top 10 *  from V_data as v1 where v1.TypeID=1

and v1.ID not in (select top 20 ID from V_data as v2 where v2.TypeID=1  order by v2.AddDate desc) 

order by v1.AddDate desc

水晶途途 | 园豆:1443 (小虾三级) | 2012-03-18 18:59

还是不行,我把视图 换成表了,就没问题了。。。不知道怎么回事

支持(0) 反对(0) East神奇 | 园豆:21 (初学一级) | 2012-03-18 19:34
0

看你的sql的意思是分页,但是这样的分页肯定效率是很低的。

小小刀 | 园豆:1991 (小虾三级) | 2012-03-18 19:03

请问下,你在项目中一般是怎么分页的啊?

支持(0) 反对(0) East神奇 | 园豆:21 (初学一级) | 2012-03-18 19:08

@East神奇: GOOGLE一下,网上很多

支持(0) 反对(0) 小小刀 | 园豆:1991 (小虾三级) | 2012-03-18 20:43
0

百度一下吧 谢谢

ゆ楓わ葉ぢ | 园豆:30 (初学一级) | 2012-03-18 21:20
0

create index idx_AddDate on  V_data  (AddDate)

小材小用 | 园豆:639 (小虾三级) | 2012-03-20 13:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册