1
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
これは私のユニオンとサブクエリなどの選択ですが、これはOKの結果を返しますが、非常に遅いです。だから私は組合をJOINに変えて、これを手に入れました。mssqlでユニオンサブクエリ結合を選択すると、非常に遅い
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
実行計画を見てください。https://www.red-gate.com/simple-talk/sql/performance/execution-plan-basics/ – Leonidas199x
重複が心配ですか?そうでない場合は、 'UNION'の代わりに' UNION ALL'を使用してみてください。なぜなら、 'UNION'は実際には別個の値を返すようにしているからです。 –
いいえ、SQL Server管理で実行すると、非常に遅いですが、10レコードの結果を返すためには35〜40回かかりますが、それは非常に遅いです。 – Martin