这个脚本执行要好长时间,大家有何好办法?

heavyrain1234 2017-08-14 10:18:45
这个脚本执行要好长时间,大家有何好办法?

SELECT wpsxlb1
FROM xtm12
WHERE wpsxlb1 NOT IN ( SELECT DISTINCT
wpsxlb1
FROM xtm12
WHERE xtwpmc LIKE '%钱夹%'
OR xtwpmc LIKE '%盒'
OR xtwpmc LIKE '%箱%'
OR xtwpmc LIKE '%链'
OR xtwpmc LIKE '%袋'
OR xtwpmc LIKE '%杯%'
OR xtwpmc LIKE '%伞%'
OR xtwpmc LIKE '%盘%'
OR xtwpmc LIKE '%函%'
OR xtwpmc LIKE '%册%'
OR xtwpmc LIKE '%表%'
OR xtwpmc LIKE '%假%'
OR xtwpmc LIKE '%架%'
OR xtwpmc LIKE '%剂%'
OR xtwpmc LIKE '%团购%'
OR xtwpmc LIKE '%测试%'
OR xtwpmc LIKE '%剂%'
OR xtwpmc LIKE '%扣'
OR xtwpmc LIKE '%湿巾%'
OR xtwpmc LIKE '%包'
OR xtwpmc LIKE '%折页%'
OR xtwpmc LIKE '%枕%'
OR xtwpmc LIKE '%框%'
OR xtwpmc LIKE '%胸针%'
OR xtwpmc LIKE '%马'
OR xtwpmc LIKE '%眼镜%' )  单纯子查询,执行实际不长30s以内
AND wpsxlb1 IN ( SELECT DISTINCT
wpsxlb1
FROM xtm12
WHERE wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\' )
...全文
535 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
顺势而为1 2017-08-15
  • 打赏
  • 举报
回复
子查询中, Exists 比 IN 要快, 试试这个


SELECT DISTINCT  wpsxlb1 --,wpxsdj --wpsxlb37, xtwpmc,
FROM    xtm12 a
WHERE    exists ( SELECT DISTINCT wpsxlb1
                  FROM   xtm12 b
                  WHERE b.wpsxlb1=a.wpsxlb1
				        And (xtwpmc not LIKE '%钱夹%'
							OR xtwpmc not LIKE '%盒'
							OR xtwpmc not LIKE '%箱%'
							OR xtwpmc not LIKE '%链'
							OR xtwpmc not LIKE '%袋'
							OR xtwpmc not LIKE '%杯%'
							OR xtwpmc not LIKE '%伞%'
							OR xtwpmc not LIKE '%盘%'
							OR xtwpmc not LIKE '%函%'
							OR xtwpmc not LIKE '%册%'
							OR xtwpmc not LIKE '%表%'
							OR xtwpmc not LIKE '%假%'
							OR xtwpmc not LIKE '%架%'
							OR xtwpmc not LIKE '%剂%'
							OR xtwpmc not LIKE '%团购%'
							OR xtwpmc not LIKE '%测试%'
							OR xtwpmc not LIKE '%剂%'
							OR xtwpmc not LIKE '%扣'
							OR xtwpmc not LIKE '%湿巾%'
							OR xtwpmc not LIKE '%包'
							OR xtwpmc not LIKE '%折页%'
							OR xtwpmc not LIKE '%枕%'
							OR xtwpmc not LIKE '%框%'
							OR xtwpmc not LIKE '%胸针%'
							OR xtwpmc not LIKE '%马'
							OR xtwpmc not LIKE '%眼镜%' ))
        AND exists ( SELECT DISTINCT wpsxlb1
                         FROM   xtm12 c
                         WHERE c.wpsxlb1=a.wpsxlb1
						       And (wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\'
									OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\'
									OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\'
									OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\'
									OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\'
									OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\'
									OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\'
									OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\' )) 


繁花尽流年 2017-08-15
  • 打赏
  • 举报
回复
如果 xtm12数据量非常大建议就像1#说的先把过滤的条件衍生出一张结果表,直接查询的时候调用就行了。衍生可以定时跑,不需要每次查询都走一遍。
heavyrain1234 2017-08-15
  • 打赏
  • 举报
回复
换成这个好一些了:

SELECT DISTINCT  wpsxlb1 --,wpxsdj --wpsxlb37, xtwpmc,
FROM    xtm12
WHERE    exists ( SELECT DISTINCT
                                wpsxlb1
                         FROM   xtm12
                         WHERE  xtwpmc not LIKE '%钱夹%'
                                OR xtwpmc not LIKE '%盒'
                                OR xtwpmc not LIKE '%箱%'
                                OR xtwpmc not LIKE '%链'
                                OR xtwpmc not LIKE '%袋'
                                OR xtwpmc not LIKE '%杯%'
                                OR xtwpmc not LIKE '%伞%'
                                OR xtwpmc not LIKE '%盘%'
                                OR xtwpmc not LIKE '%函%'
                                OR xtwpmc not LIKE '%册%'
                                OR xtwpmc not LIKE '%表%'
                                OR xtwpmc not LIKE '%假%'
                                OR xtwpmc not LIKE '%架%'
                                OR xtwpmc not LIKE '%剂%'
                                OR xtwpmc not LIKE '%团购%'
                                OR xtwpmc not LIKE '%测试%'
                                OR xtwpmc not LIKE '%剂%'
                                OR xtwpmc not LIKE '%扣'
                                OR xtwpmc not LIKE '%湿巾%'
                                OR xtwpmc not LIKE '%包'
                                OR xtwpmc not LIKE '%折页%'
                                OR xtwpmc not LIKE '%枕%'
                                OR xtwpmc not LIKE '%框%'
                                OR xtwpmc not LIKE '%胸针%'
                                OR xtwpmc not LIKE '%马'
                                OR xtwpmc not LIKE '%眼镜%' )
        AND wpsxlb1 IN ( SELECT DISTINCT
                                wpsxlb1
                         FROM   xtm12
                         WHERE  wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\'
                                OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\' )   
shoppo0505 2017-08-15
  • 打赏
  • 举报
回复
引用 9 楼 z10843087 的回复:
[quote=引用 8 楼 shoppo0505 的回复:] 这个语句是没有办法优化了。 要提升性能,要么优化数据库结构,要么提升硬件性能。
感觉要从业务上去调整,,提升硬件也不一定能解决[/quote] 是的,提升硬件也只是临时的解决方法。 随着数据的增加,性能指数级的下降,根本的解决方法还是需要调整数据库结构。 其实就目前这个语句来说,结构调整应该不复杂,不知道还有多少其他关联的部分
OwenZeng_DBA 2017-08-15
  • 打赏
  • 举报
回复
引用 8 楼 shoppo0505 的回复:
这个语句是没有办法优化了。 要提升性能,要么优化数据库结构,要么提升硬件性能。
感觉要从业务上去调整,,提升硬件也不一定能解决
shoppo0505 2017-08-15
  • 打赏
  • 举报
回复
这个语句是没有办法优化了。 要提升性能,要么优化数据库结构,要么提升硬件性能。
  • 打赏
  • 举报
回复
同意5楼的方式,你建个计算列,把满足这些条件的标识出来,后面查询就快了
OwenZeng_DBA 2017-08-15
  • 打赏
  • 举报
回复
引用 楼主 heavyrain1234 的回复:
这个脚本执行要好长时间,大家有何好办法?

SELECT  wpsxlb1
FROM    xtm12
WHERE   wpsxlb1 NOT IN ( SELECT DISTINCT
                                wpsxlb1
                         FROM   xtm12
                         WHERE  xtwpmc LIKE '%钱夹%'
                                OR xtwpmc LIKE '%盒'
                                OR xtwpmc LIKE '%箱%'
                                OR xtwpmc LIKE '%链'
                                OR xtwpmc LIKE '%袋'
                                OR xtwpmc LIKE '%杯%'
                                OR xtwpmc LIKE '%伞%'
                                OR xtwpmc LIKE '%盘%'
                                OR xtwpmc LIKE '%函%'
                                OR xtwpmc LIKE '%册%'
                                OR xtwpmc LIKE '%表%'
                                OR xtwpmc LIKE '%假%'
                                OR xtwpmc LIKE '%架%'
                                OR xtwpmc LIKE '%剂%'
                                OR xtwpmc LIKE '%团购%'
                                OR xtwpmc LIKE '%测试%'
                                OR xtwpmc LIKE '%剂%'
                                OR xtwpmc LIKE '%扣'
                                OR xtwpmc LIKE '%湿巾%'
                                OR xtwpmc LIKE '%包'
                                OR xtwpmc LIKE '%折页%'
                                OR xtwpmc LIKE '%枕%'
                                OR xtwpmc LIKE '%框%'
                                OR xtwpmc LIKE '%胸针%'
                                OR xtwpmc LIKE '%马'
                                OR xtwpmc LIKE '%眼镜%' )  单纯子查询,执行实际不长30s以内
        AND wpsxlb1 IN ( SELECT DISTINCT
                                wpsxlb1
                         FROM   xtm12
                         WHERE  wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\'
                                OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\' )
这是个什么功能,为什么要加这个多模糊查询
吉普赛的歌 2017-08-15
  • 打赏
  • 举报
回复
你这些值是不是固定的?如果是固定的, 可用计算列来实现, 效率就比较高了,查询时也很简单的。
二月十六 2017-08-15
  • 打赏
  • 举报
回复
引用 1楼二月十六 的回复:
这个语句是用来干什么?如果是统计分析之类的,可以存储一个临时表,隔断时间统计一次;
如果是实时查询,能不能考虑,参数是传入进来的,不要写那么多like……
试试这个:
 SELECT wpsxlb1
FROM xtm12
WHERE ( xtwpmc LIKE '%钱夹%'
OR xtwpmc LIKE '%盒'
OR xtwpmc LIKE '%箱%'
OR xtwpmc LIKE '%链'
OR xtwpmc LIKE '%袋'
OR xtwpmc LIKE '%杯%'
OR xtwpmc LIKE '%伞%'
OR xtwpmc LIKE '%盘%'
OR xtwpmc LIKE '%函%'
OR xtwpmc LIKE '%册%'
OR xtwpmc LIKE '%表%'
OR xtwpmc LIKE '%假%'
OR xtwpmc LIKE '%架%'
OR xtwpmc LIKE '%剂%'
OR xtwpmc LIKE '%团购%'
OR xtwpmc LIKE '%测试%'
OR xtwpmc LIKE '%剂%'
OR xtwpmc LIKE '%扣'
OR xtwpmc LIKE '%湿巾%'
OR xtwpmc LIKE '%包'
OR xtwpmc LIKE '%折页%'
OR xtwpmc LIKE '%枕%'
OR xtwpmc LIKE '%框%'
OR xtwpmc LIKE '%胸针%'
OR xtwpmc LIKE '%马'
OR xtwpmc LIKE '%眼镜%'
)
AND ( wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\'
);
有点问题,这里应该是WHERE  ( xtwpmc Not LIKE '%钱夹%'
道素 2017-08-15
  • 打赏
  • 举报
回复
你这里不都是在查一个表的数据吗?你试试,这个语句和你的查询返回的结果是否一样

SELECT * FROM  xtm12
WHERE  (xtwpmc NOT LIKE '%钱夹%'
                                AND xtwpmc LIKE '%盒'
                                AND xtwpmc LIKE '%箱%'
                                AND xtwpmc LIKE '%链'
                                AND xtwpmc LIKE '%袋'
                                AND xtwpmc LIKE '%杯%'
                                AND xtwpmc LIKE '%伞%'
                                AND xtwpmc LIKE '%盘%'
                                AND xtwpmc LIKE '%函%'
                                AND xtwpmc LIKE '%册%'
                                AND xtwpmc LIKE '%表%'
                                AND xtwpmc LIKE '%假%'
                                AND xtwpmc LIKE '%架%'
                                AND xtwpmc LIKE '%剂%'
                                AND xtwpmc LIKE '%团购%'
                                AND xtwpmc LIKE '%测试%'
                                AND xtwpmc LIKE '%剂%'
                                AND xtwpmc LIKE '%扣'
                                AND xtwpmc LIKE '%湿巾%'
                                AND xtwpmc LIKE '%包'
                                AND xtwpmc LIKE '%折页%'
                                AND xtwpmc LIKE '%枕%'
                                AND xtwpmc LIKE '%框%'
                                AND xtwpmc LIKE '%胸针%'
                                AND xtwpmc LIKE '%马'
                                AND xtwpmc LIKE '%眼镜%' 
                                ) AND  (
                                   wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\'
                                OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\'
                                OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\' 
                                )
  • 打赏
  • 举报
回复
in 用 exists 方式试试
二月十六 2017-08-14
  • 打赏
  • 举报
回复
这个语句是用来干什么?如果是统计分析之类的,可以存储一个临时表,隔断时间统计一次;
如果是实时查询,能不能考虑,参数是传入进来的,不要写那么多like……
试试这个:
 SELECT wpsxlb1
FROM xtm12
WHERE ( xtwpmc LIKE '%钱夹%'
OR xtwpmc LIKE '%盒'
OR xtwpmc LIKE '%箱%'
OR xtwpmc LIKE '%链'
OR xtwpmc LIKE '%袋'
OR xtwpmc LIKE '%杯%'
OR xtwpmc LIKE '%伞%'
OR xtwpmc LIKE '%盘%'
OR xtwpmc LIKE '%函%'
OR xtwpmc LIKE '%册%'
OR xtwpmc LIKE '%表%'
OR xtwpmc LIKE '%假%'
OR xtwpmc LIKE '%架%'
OR xtwpmc LIKE '%剂%'
OR xtwpmc LIKE '%团购%'
OR xtwpmc LIKE '%测试%'
OR xtwpmc LIKE '%剂%'
OR xtwpmc LIKE '%扣'
OR xtwpmc LIKE '%湿巾%'
OR xtwpmc LIKE '%包'
OR xtwpmc LIKE '%折页%'
OR xtwpmc LIKE '%枕%'
OR xtwpmc LIKE '%框%'
OR xtwpmc LIKE '%胸针%'
OR xtwpmc LIKE '%马'
OR xtwpmc LIKE '%眼镜%'
)
AND ( wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\'
);

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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