首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mssql select with union子查询join和like非常慢

问mssql select with union子查询join和like非常慢
EN

Stack Overflow用户
提问于 2017-08-09 16:44:22
回答 1查看 278关注 0票数 1
代码语言:javascript
复制
SELECT 
TOP 10 pcchrgcod
FROM ( 
SELECT TOP 10 acctno AS pcchrgcod FROM hdocord
WHERE acctno LIKE '2007-000%' 
GROUP BY 
acctno
UNION

SELECT TOP 10 acctno AS pcchrgcod FROM hpatchrg
WHERE acctno LIKE '2007-000%' 
GROUP BY 
acctno 
UNION

SELECT TOP 10 acctno AS pcchrgcod FROM hrqd
WHERE acctno LIKE '2007-000%' 
GROUP BY 
acctno
UNION

SELECT TOP 10 acctno AS pcchrgcod FROM hrxo
WHERE acctno LIKE '2007-000%'   
GROUP BY 
acctno 
)
sub 
GROUP BY 
pcchrgcod

这是我的select with union and subquery and like,这是返回ok结果,但它非常慢。所以我把union改成JOIN,我得到了这个

代码语言:javascript
复制
SELECT TOP 10  coalesce(t1.acctno, MAX(t2.acctno),MAX(t3.acctno),MAX(t4.acctno)) AS pcchrgcod 
--t1.acctno AS t1pcchrgcod,
--t2.acctno AS t2pcchrgcod,
--t3.acctno AS t3pcchrgcod,
--t4.acctno AS t4pcchrgcod
FROM hdocord    AS t1 LEFT JOIN 
hpatchrg AS t2 ON t1.acctno = t2.acctno LEFT JOIN 
hrqd AS t3 ON t2.acctno = t3.acctno LEFT JOIN 
hrxo AS t4 ON t3.acctno = t4.acctno 
WHERE t1.acctno LIKE '2007-000%'    
GROUP BY 
t1.acctno
--t2.acctno,
--t3.acctno,
--t4.acctno

不过,它还是非常慢的。

如何才能使此select运行得更快?

UPDATE

​

​

UPDATE

estiamte plan

actual plan

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-09 16:59:13

答案取决于您的用法,您没有指定用法,请更新您的问题。

您可以在MS SQL中使用物化视图别名index views,也可以创建一个临时表,其中包含所需的所有信息,然后从其中获取信息。

它如此缓慢的主要原因是LIKE的使用。你应该想出一种方法(通过执行计划)来移除它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45585746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档