问两个关于SQL查询的问题,大家帮帮忙,谢谢了!

-Tracy-McGrady- 2013-01-07 10:34:14
我有一张表,里面大概有数据二千万条。表结构及各字段大概是这样的:

--表名qktj:欠款统计
--字段 dwdm:单位代码,qk:欠款金额,qkts:欠款天数,czydm:操作员代码,djsj:登记时间
create table qktj(dwdm varchar(10),qk numeric(19,2),qkts int,czydm varchar(5),djsj datetime)
insert into qktj(dwdm,qk,qkts,czydm,djsj)
select '33-A',2341.35,123,'1523','2009-01-11 13:34:23' union all--时间格式我忘记具体怎么写了,这里写到秒
select '33-A',341.35,13,'5123','2009-11-12 13:34:23' union all
select '33-B',-241.59,23,'1234','2012-04-23 13:34:23' union all
select '33-A',9341.75,13,'1234','2012-05-30 13:34:23' union all
select '33-A',241.66,13,'1523','2011-05-23 13:34:23' union all
select '33-B',-23.68,143,'1234','2010-08-11 13:34:23' union all
select '33-B',21.34,223,'1523','2010-09-21 13:34:23' union all
select '33-C',2341.45,223,'1234','2009-11-11 13:34:23' union all
select '33-C',241.69,153,'1523','2012-07-11 13:34:23' union all
select '33-A',-341.88,44,'1523','2012-12-11 13:34:23' union all
select '33-C',21.80,34,'1234','2011-05-11 13:34:23' union all
select '33-B',2341.35,123,'1234','2012-01-11 13:34:23' union all
select '33-B',2341.35,123,'1523','2009-01-11 13:34:23' union all
select '33-A',2341.35,123,'1234','2012-01-11 13:34:23' union all
select '33-A',2341.35,123,'1523','2009-01-11 13:34:23' union all
select '33-C',2341.35,123,'1523','2011-01-11 13:34:23' union all
select '33-A',2341.35,123,'1234','2010-01-11 13:34:23' union all
select '33-A',2341.35,123,'1523','2009-01-11 13:34:23'
--这些数据是我现在随便举例写的

这个表里面没有主键,里面存放各个单位的欠款欠款,为负数的是我倒欠别人的
问题一:
我使用了下面的两条SQL语句,效果很差,大概都需要一分多钟的时间,请问,怎么修改表结构或者什么可以提高速度?

select top(200) * from qktj with(nolock)
select top(2000) * from qktj with(nolock)
--速度很慢,请赐教

问题二:
我想统计某一段时间内某个业务员对应单位的欠款情况,查询出来的表结构大概如下:
单位代码 业务员 0-30天 30-60天 60-120天 120天以上 合计
如:
33-A 1523 **元 @#元 !@元 %¥元 @@元
请问要怎么实现,谢谢大家了,在线等待,请各位走过路过的朋友帮帮忙,感激不尽!!!!
...全文
477 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
-Tracy-McGrady- 2013-01-09
  • 打赏
  • 举报
回复
引用 29 楼 DBA_Huangzj 的回复:
我有媳妇,比小lee妹好看多了。
小lee又是谁啊?二奶?
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
问题2好像不用行转列,用磊仔的就可以了
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
加完班了,为了混点加班时间,1点前帮你看看,还有磊仔那个能用不?
-Tracy-McGrady- 2013-01-08
  • 打赏
  • 举报
回复
引用 11 楼 tanleittl 的回复:
媳妇你个鬼哦
不清楚不清楚
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
引用 23 楼 yangsh0722 的回复:
引用 22 楼 DBA_Huangzj 的回复: order by 要看是asc还是desc你那查询是select top 那个? 没有,大概是select * from qktj with(nolock) where djsj>='2012-11-01' and djsj<'2012-12-01' order by djsj
你select * 还order by干啥?贴个执行计划出来看看。
-Tracy-McGrady- 2013-01-08
  • 打赏
  • 举报
回复
引用 22 楼 DBA_Huangzj 的回复:
order by 要看是asc还是desc你那查询是select top 那个?
没有,大概是select * from qktj with(nolock) where djsj>='2012-11-01' and djsj<'2012-12-01' order by djsj
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
order by 要看是asc还是desc你那查询是select top 那个?
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
我有媳妇,比小lee妹好看多了。
-Tracy-McGrady- 2013-01-08
  • 打赏
  • 举报
回复
引用 27 楼 DBA_Huangzj 的回复:
引用 25 楼 yangsh0722 的回复:刚打乒乓球回来,大哥啊,俺U盘忘记家里了,公司内外网是分开呢,整不了图啊,交换网又没有权限昨晚又说没环境,今天又说这说那的。 时间要用聚集索引,这样才能实现真正的顺序。
谢谢了,给你55分,给你媳妇磊磊留点
-Tracy-McGrady- 2013-01-08
  • 打赏
  • 举报
回复
引用 20 楼 DBA_Huangzj 的回复:
引用 18 楼 yangsh0722 的回复:大哥,我对索引知之甚少啊,CREATE CLUSTERED INDEX后怎么删除?drop index 索引名 on 表名
嘿嘿,现在知道了,平时很少用啊,怎么我加了索引跟没加索引,查询速度没多大区别啊,20万数据10秒左右,order by 索引 ,也木有多大作用
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
引用 18 楼 yangsh0722 的回复:
大哥,我对索引知之甚少啊,CREATE CLUSTERED INDEX后怎么删除?
drop index 索引名 on 表名
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
引用 17 楼 yangsh0722 的回复:
引用 16 楼 DBA_Huangzj 的回复: 对于你的问题1,我刚才跑到客户的数据库找了个3000多万的表,秒杀,下面是截图: 你那个问题可以原因: 1、I/O太慢。 2、没有聚集索引,缺少了一个“顺序”这个我在1楼跟你说过。 3、有阻塞。或者内存不足,展示不了那么“多”数据。 我刚刚试了下,select top 20000 * from qktj with(nolock)……
那很可能阻塞了。
-Tracy-McGrady- 2013-01-08
  • 打赏
  • 举报
回复
大哥,我对索引知之甚少啊,CREATE CLUSTERED INDEX后怎么删除?
-Tracy-McGrady- 2013-01-08
  • 打赏
  • 举报
回复
引用 16 楼 DBA_Huangzj 的回复:
对于你的问题1,我刚才跑到客户的数据库找了个3000多万的表,秒杀,下面是截图: 你那个问题可以原因: 1、I/O太慢。 2、没有聚集索引,缺少了一个“顺序”这个我在1楼跟你说过。 3、有阻塞。或者内存不足,展示不了那么“多”数据。
我刚刚试了下,select top 20000 * from qktj with(nolock)也是秒杀啊,昨天top 200都有问题,是不是使用这张表的人太多了,造成了阻塞?内存啊,I/O那些应该是没有多大问题
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
引用 25 楼 yangsh0722 的回复:
刚打乒乓球回来,大哥啊,俺U盘忘记家里了,公司内外网是分开呢,整不了图啊,交换网又没有权限
昨晚又说没环境,今天又说这说那的。 时间要用聚集索引,这样才能实现真正的顺序。
-Tracy-McGrady- 2013-01-08
  • 打赏
  • 举报
回复
引用 24 楼 DBA_Huangzj 的回复:
引用 23 楼 yangsh0722 的回复:引用 22 楼 DBA_Huangzj 的回复: order by 要看是asc还是desc你那查询是select top 那个? 没有,大概是select * from qktj with(nolock) where djsj>='2012-11-01' and djsj<'2012-12-01' order by ……
按时间排序啊,里面的时间貌似是乱的,我也想order by 欠款天数
-Tracy-McGrady- 2013-01-08
  • 打赏
  • 举报
回复
刚打乒乓球回来,大哥啊,俺U盘忘记家里了,公司内外网是分开呢,整不了图啊,交换网又没有权限
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
对于你的问题1,我刚才跑到客户的数据库找了个3000多万的表,秒杀,下面是截图:


你那个问题可以原因:
1、I/O太慢。
2、没有聚集索引,缺少了一个“顺序”这个我在1楼跟你说过。
3、有阻塞。或者内存不足,展示不了那么“多”数据。
DBA_磊仔 2013-01-07
  • 打赏
  • 举报
回复
媳妇你个鬼哦
加载更多回复(10)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧