sybase查询太慢了,大家看下sql看有没有优化的方法

liang_A 2011-10-21 03:18:51
两张表:
表area_device(2000条数据)
列:devSN(varchar), areaId(varchar).devSN和areaId是联合主键

表 device_info(600万条数据)
列:id(int),devSN(varchar)设备sn,time(DateTime)回合时间,value(varchar)性能值. id是主键

两张表中:devSN是关联列(但是没有加外键)

sql语句:取出一定时间段内一个area下的设备的device_info表中每回合value的和的最大值(时间段内有多回合)
select max(b.s1) as m1, max(b.s2) as m2 from (select sum(convert(numeric(18,0),value)) as s1 From device_info AS aw where time between '2011-07-01 00:00:00' and '2011-08-01 00:00:00' and aw.devSN in( select devSN from area_device where areaId='12') and value!=null group by time) as b

注:表中没有加任何索引,执行速度大约在130s左右

求优化
...全文
406 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackbeer001 2012-02-02
  • 打赏
  • 举报
回复
建立几个临时表,并加上索引,不用一个复杂sql来实现
13193887977 2011-12-23
  • 打赏
  • 举报
回复
select max(b.s1) as m1, max(b.s2) as m2 from (select sum(convert(numeric(18,0),value)) as s1 From device_info AS aw (index devSN) where time between '2011-07-01 00:00:00' and '2011-08-01 00:00:00' and aw.devSN in( select devSN from area_device where areaId='12') and value!=null group by time) as b
ACMAIN_CHM 2011-12-21
  • 打赏
  • 举报
回复
[Quote]注:表中没有加任何索引,执行速度大约在130s左右[/Quote]
不加索引则很难优化。
iihero 2011-12-21
  • 打赏
  • 举报
回复
用作条件的相关字段都可以试着加一加。
liang_A 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]

大数据量查询的话,还是把相关字段加上索引比较好.
[/Quote]

请问如何加,加到哪些字段上?
liang_A 2011-12-20
  • 打赏
  • 举报
回复
怎么这么久没人来啊,求优化啊!
可不可以用其他的方式,比如存储进程,求高手啊
top7630971 2011-10-25
  • 打赏
  • 举报
回复
加索引
dawugui 2011-10-22
  • 打赏
  • 举报
回复
大数据量查询的话,还是把相关字段加上索引比较好.

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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