sqlserver语句优化
这条查询语句太慢了,查询结果约16w,recode表数据约20w(持续增长),查询速度约6分钟如何去优化这个,最终要得出字段CDRID
想用with as去写,但没有思路
SELECT t1.CDRID FROM t1
LEFT JOIN
(
SELECT * FROM
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 )
) 不用not in和or 时间至少能缩短50%!!! cxb2468 发表于 2022-4-20 10:54
不用not in和or 时间至少能缩短50%!!!
是的,减去可以缩短时间
但是替代方案呢? 内外操作引用的都是同一张表,内层已经对数据进行了筛选,外层操作有什么意义?
VISITORID 是唯一的吗?允不允许重复 看你这语法,应该是MSSQL,至少给出你这几个列的数据类型或是给个表结构,纯看这个,除了NOT IN 以及 OR 可优化,没什么可能帮到你的。 时光稀释 发表于 2022-4-20 14:08
内外操作引用的都是同一张表,内层已经对数据进行了筛选,外层操作有什么意义?
VISITORID 是唯 ...
意义在where这,我如果把or去掉,基本是秒查 拆分两条Sql,用union all
页:
[1]