SQL语句如何优化? 100
例子如下:表名:Records列名:ID(主键),starttime(开始时间),stoptime(结束时间)表容量:100万行记录。业务说明:每产生一通电话则产生一条记...
例子如下:
表名:Records
列名:ID(主键),starttime(开始时间),stoptime(结束时间)
表容量:100万行记录。
业务说明:每产生一通电话则产生一条记录,生成唯一ID,记录开始、结束时间。
查询需求:找出通话的最大并发数。
我的语句:
select A.ID,count(*)
from Records A, Records B
where A.starttime<=B.stoptime and A.stoptime >=B.starttime
group by A.ID
问题:由于该表数据量较大,交叉表查询会导致耗时很长,速度巨慢,请问该如何改进本语句? 展开
表名:Records
列名:ID(主键),starttime(开始时间),stoptime(结束时间)
表容量:100万行记录。
业务说明:每产生一通电话则产生一条记录,生成唯一ID,记录开始、结束时间。
查询需求:找出通话的最大并发数。
我的语句:
select A.ID,count(*)
from Records A, Records B
where A.starttime<=B.stoptime and A.stoptime >=B.starttime
group by A.ID
问题:由于该表数据量较大,交叉表查询会导致耗时很长,速度巨慢,请问该如何改进本语句? 展开
4个回答
展开全部
很简单啊,优先索引,第二结构,第三算法。
索引最简单,如果是SQL server客户端或者toad可以提示有哪些需要进行优化的地方。
结构就是针对要查询的值,尽量集中到一个表,减少串表,函数查询,左链的表字段查询。
算法就是OR还是IN?串表时IN还是EXISTS ?oracle in 的限制。条件执行顺序等。
然后还有其他注意的,例如只查固定字段就不要 select * 只要注意以上步骤,千万级数据串10个秒也能1秒内显示出来。
有条件的话,当然是用归档数据进行查询,这样就不会占用业务数据IO了,最后一步就是“云计算”(解析有一百种,没有统一概念,我的意识其实就是归档过程中根据分组维度计算好,并根据日期放进相关的表,减少表粒度,只进行简单的select查询)
索引最简单,如果是SQL server客户端或者toad可以提示有哪些需要进行优化的地方。
结构就是针对要查询的值,尽量集中到一个表,减少串表,函数查询,左链的表字段查询。
算法就是OR还是IN?串表时IN还是EXISTS ?oracle in 的限制。条件执行顺序等。
然后还有其他注意的,例如只查固定字段就不要 select * 只要注意以上步骤,千万级数据串10个秒也能1秒内显示出来。
有条件的话,当然是用归档数据进行查询,这样就不会占用业务数据IO了,最后一步就是“云计算”(解析有一百种,没有统一概念,我的意识其实就是归档过程中根据分组维度计算好,并根据日期放进相关的表,减少表粒度,只进行简单的select查询)
ZESTRON
2024-09-04 广告
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸...
点击进入详情页
本回答由ZESTRON提供
展开全部
你要找最大并发数,就是根据你原逻辑,就是Records表每次开始、结束时间段内存在多少单。这样数据库会针对Records表的100万条记录,将Records自己进行执行。但是并不是“最大并发”而是“每个电话通话时长内有多少个电话在打入或打出”本来逻辑都错了。
你要优化的话。自己写个循环遍历一次,记录到临时表中。
临时表把 select top 1 starttime from Records order by id 作为开始时间
把 select top 1 starttime from Records order by id desc 作为结束时间
如果考虑算法速度的话和排除最少通话时段的时间与判断每天同话数是否大于现当前算出的最大通话时间。能减少不必要的消耗。
你要优化的话。自己写个循环遍历一次,记录到临时表中。
临时表把 select top 1 starttime from Records order by id 作为开始时间
把 select top 1 starttime from Records order by id desc 作为结束时间
如果考虑算法速度的话和排除最少通话时段的时间与判断每天同话数是否大于现当前算出的最大通话时间。能减少不必要的消耗。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说实话,我猜是你这些表格中的数据太庞大了。
或者你提供点线索,要查询什么东西,满足什么条件,再谈优化语句。
你就贴出来这么一句话,什么也做不了。
或者你提供点线索,要查询什么东西,满足什么条件,再谈优化语句。
你就贴出来这么一句话,什么也做不了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1. 用存储过程
2. 用缓存,用临时表
2. 用缓存,用临时表
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询