吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 979|回复: 7
收起左侧

[求助] sqlserver语句优化

[复制链接]
7R903 发表于 2022-4-20 10:20
这条查询语句太慢了,查询结果约16w,recode表数据约20w(持续增长),查询速度约6分钟
如何去优化这个,最终要得出字段CDRID
想用with as去写,但没有思路
[SQL] 纯文本查看 复制代码
					
SELECT t1.CDRID FROM [recode] t1 
LEFT JOIN 
(
	SELECT * FROM [recode] 
	WHERE
	CALLED_CODE NOT IN ( '0', '1', '2', '3', '4' ) 
	AND STARTTIME BETWEEN CONVERT ( VARCHAR ( 10 ), STARTTIME, 120 ) + ' 09:00:00' AND CONVERT ( VARCHAR ( 10 ), STARTTIME, 120 ) + ' 18:00:00' --时间范围
	AND DATEPART( weekday, STARTTIME +@@DATEFIRST - 1 ) NOT IN ( 6, 7 ) --不是周末
) t2 
ON t1.VISITORID = t2.VISITORID 
WHERE
	1 = 1 
	AND 
	(
		( t1.STARTTIME BETWEEN t2.STARTTIME AND t2.ENDTIME ) 
	OR 
		( t2.STARTTIME BETWEEN t1.STARTTIME AND t1.ENDTIME ) 
	) 

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

cxb2468 发表于 2022-4-20 10:54
不用  not in  和or 时间至少能缩短50%!!!
 楼主| 7R903 发表于 2022-4-20 10:58
cxb2468 发表于 2022-4-20 10:54
不用  not in  和or 时间至少能缩短50%!!!

是的,减去可以缩短时间
但是替代方案呢?
时光稀释 发表于 2022-4-20 14:08
内外操作引用的都是同一张表[recode],内层已经对数据进行了筛选,外层操作有什么意义?

VISITORID 是唯一的吗?允不允许重复

点评

意义在where这,我如果把or去掉,基本是秒查  发表于 2022-4-20 19:55
icysky0605 发表于 2022-4-20 14:23
看你这语法,应该是MSSQL,至少给出你这几个列的数据类型或是给个表结构,纯看这个,除了NOT IN 以及 OR 可优化,没什么可能帮到你的。
 楼主| 7R903 发表于 2022-4-20 20:08
时光稀释 发表于 2022-4-20 14:08
内外操作引用的都是同一张表[recode],内层已经对数据进行了筛选,外层操作有什么意义?

VISITORID 是唯 ...

意义在where这,我如果把or去掉,基本是秒查
封心棒棒糖 发表于 2022-4-21 07:28
拆分两条Sql,用union all
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表