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
这是我的选择,带有union和子查询等,这是返回ok结果,但它很慢。所以我把联盟变成了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
仍然很慢。
如何让这个选择运行更快?
UPDATE
UPDATE
答案 0 :(得分:1)
答案取决于您未使用的用法,请更新您的问题。
您可以在MS SQL中使用物化视图别名index views
,也可以创建一个临时表,其中包含您需要的所有信息,您可以从那里获取信息。
速度如此之慢的主要原因是LIKE
的使用。你应该提出一种方法(通过执行计划)来删除它。