我使用的数据库为sql2000 数据库中有1张表的数据记录比较多。大概都在100W左右。 我使用了一条语句在查询分析器里运行的时间是40秒,查询的结果只有100~200条。请问有什么优化的方法。sql语句如下:KCT_CPB 表中有上百万的数据。
temp是临时表,存放符合条件的结果数据只有100~200条记录。
SELECT * FROM (SELECT temp.*, (SELECT SUM(Num) num FROM KCT_CPB WHERE (LXT_CPB.MerID = 'SYKH001') AND (KCT_CPB.ProID = 'NXT') AND (KCT_CPB.UnNum <> 0) AND KCT_CPB.cpid <= t .cpid) AS sumNUM FROM KCT_CPB temp WHERE (UnNum <> 0) AND (MerID = 'SYKH001') AND (ProID = 'NXT') ) DERIVEDTBL WHERE (sumNUM < 2542)请大大们给点建议。
temp是临时表,存放符合条件的结果数据只有100~200条记录。
SELECT * FROM (SELECT temp.*, (SELECT SUM(Num) num FROM KCT_CPB WHERE (LXT_CPB.MerID = 'SYKH001') AND (KCT_CPB.ProID = 'NXT') AND (KCT_CPB.UnNum <> 0) AND KCT_CPB.cpid <= t .cpid) AS sumNUM FROM KCT_CPB temp WHERE (UnNum <> 0) AND (MerID = 'SYKH001') AND (ProID = 'NXT') ) DERIVEDTBL WHERE (sumNUM < 2542)请大大们给点建议。
解决方案 »
- 急呀!!!!!卸载sql server 2000时c盘下的sql server configuration manager用删除么??
- hsql 里存储过程怎么在java程序里调用
- SQL2000 企业管理器中的表,存储过程,用户自定义函数能否按照最后修改日期排序
- 关于sql server2000远程连接的问题,急问!!!!
- 求一条查询语句。如何根据日期分组排列
- SQL里清除html标签 问题
- 简单问题,指点一下。只想知道原因。
- 数据迁移的sql语句
- 怎样判断某基础数据表的某项已被其它表引用?
- 有关与vf中的报表问题:~~~~~~~~~~~~~
- 关于先进先出的问题,有表结构
- SQLnewlearner ,请进 :) 关于object同名问题.
请问有没有对这条语句有更好的解决的办法。
(
SELECT temp.*, (
SELECT SUM(Num) num
FROM KCT_CPB
WHERE (LXT_CPB.MerID = 'SYKH001')
AND (KCT_CPB.ProID = 'NXT')
AND (KCT_CPB.UnNum <> 0)
AND KCT_CPB.cpid <= t .cpid
) AS sumNUM
FROM KCT_CPB temp
WHERE (UnNum <> 0)
AND (MerID = 'SYKH001') AND (ProID = 'NXT')
) DERIVEDTBL
WHERE (sumNUM < 2542)
create index IX_KCT_CPB on KCT_CPB(MerID,ProID,cpid)
FROM KCT_CPB 这个是他关键要的东西
SELECT tmp.*, b.Num
FROM KCT_CPB tmp
LEFT JOIN (
SELECT cpid, SUM(Num) AS Num
FROM KCT_CPB
WHERE LXT_CPB.MerID = 'SYKH001')
AND (KCT_CPB.ProID = 'NXT')
AND (KCT_CPB.UnNum <> 0)
GROUP BY cpid
) b ON tmp.cpid = b.cpid
WHERE (UnNum <> 0) AND (MerID = 'SYKH001') AND (ProID = 'NXT') AND SumNum < 2542
cpid merid proid unnum
1 sykh001 GZ1# 50
2 sykh001 GZ1# 100
3 sykh001 GZ1# 60
4 sykh001 GZ1# 40
5 sykh001 GZ1# 90
6 sykh001 GZ1# 8
7 sykh001 GZ1# 45
8 sykh001 GZ1# 200
9 sykh001 GZ1# 13
10 sykh001 GZ1# 77我要查询的结果为客户编号merid=sykh001,proid=DZ1# sum(unnum)<260 显示结果为下面:
cpid merid proid unnum sumnum
1 sykh001 GZ1# 50 50
2 sykh001 GZ1# 100 150
3 sykh001 GZ1# 60 210
4 sykh001 GZ1# 40 250
如果WHERE (sumNUM >= 2542)的数据量很在考虑用游标处理,如果不是可考虑用临时表处理