微软BI开拓者数据库专区SQL Server开发 在家帮我解决条SQL语句吧

1  /  1  页   1 跳转 查看:5280

在家帮我解决条SQL语句吧

在家帮我解决条SQL语句吧

我有条SQL语句,是这样的
select top 10 ID,ConsumerNO,Name from client
where CorporationNO=301731 and ID not in(select top 2025110 ID from client where CorporationNO=301731
order by ID desc)order by ID desc
我现在这个表里有2百多万条记录,
我在浏览1到前几十万条记录是很快的,一下就出来,
但是一到后面,也就是快接近尾页了,那些数据就特别慢,我在查询分析器里试了下要11秒啊
我在这个表里建了这样的索引
CREATE INDEX client_Index ON client(CorporationNO,ConsumerNO)
不知哪里还没有搞好
 

回复: 在家帮我解决条SQL语句吧

这种语句越到后面就会越慢的。你试试在ID上建聚集索引,在CorporationNO上建非聚集索引看看
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。
 

回复: 在家帮我解决条SQL语句吧

那我应该怎 么改呢?我原本的这条建索引语句,应该怎样改呢?请教下我吧
CREATE INDEX client_Index ON client(CorporationNO,ConsumerNO)
另外我的ID在建表时已设成 ID bigint IDENTITY  Primary Key 了
最后编辑wyqjx 最后编辑于 2007-06-05 21:22:09
 

回复: 在家帮我解决条SQL语句吧

或者你可以每次记录下该页面所显示的最小和最大的ID,然后使用下面的查询来显示上一页

select top 10 ID,ConsumerNO,Name from client
where CorporationNO=301731 and ID<最小的ID order by ID desc

如果要显示下一页,则使用:

select top 10 ID,ConsumerNO,Name from client
where CorporationNO=301731 and ID>最大的ID order by ID
最后编辑拓狼 最后编辑于 2007-06-06 20:05:56
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。
 

回复: 在家帮我解决条SQL语句吧

解决这类问题根本就是努力在select top中添加一个限制性条件,来缩减扫描的范围
 

回复: 在家帮我解决条SQL语句吧

wyqjx的意思是找2025110条数据后面的10条吧,前面的2025110条数据怎么说都难绕,如果说把这些数据同时放到select里肯定会很累,如果用top,也不见得怎么样,像前面还提到ID在建表时已设成 ID bigint IDENTITY  Primary Key ,所以既然前面取得数据可以是有序的,而且保证后面的id一定大于前面的,因此分批读取然后一一筛选应该效果不错,就像拓狼的方法,记录最末尾的id号,等于每次控制一个id段,直到取出前2025110条数据即可,这个id段的跨度可以通过测试取得一个性能的平衡点,至于建立索引,应该是有必要的,毕竟这没必要全表遍历,但是怎么建立我不清楚了,wyqjx试试看效果怎么样。把结果反馈过来,共同学习
SQL Server技术交流群:71791281(有些问题在线解决或许会更快)

本群将从即日起严厉打击:刷屏、打广告、粘贴各种垃圾信息的ID,一经发现,马上删除。

希望通过我们的努力,能为大家打造一个健康有序的交流平台。
 
1  /  1  页   1 跳转

版权所有 微软BI开拓者 

Powered by Discuz!NT 2.1.202    Copyright © 2001-2012 Comsenz Inc.
Processed in 0.0625024 second(s) , 4 queries.
返顶部