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,我得到了这个
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
发布于 2017-08-09 16:59:13
答案取决于您的用法,您没有指定用法,请更新您的问题。
您可以在MS SQL中使用物化视图别名index views,也可以创建一个临时表,其中包含所需的所有信息,然后从其中获取信息。
它如此缓慢的主要原因是LIKE的使用。你应该想出一种方法(通过执行计划)来移除它。
https://stackoverflow.com/questions/45585746
复制相似问题