假設有 2 個表 - s1 和 r1。
我必須僅在 r1.Salary 中存在 s1.Salary 的情況下回傳 s1 的所有行。這里 Salary 是一個列名。
現在下面的查詢作業正常,但對于非常大的資料集來說非常慢。
SELECT * FROM s1 where s1.Salary in (select distinct r1.Salary from r1)
有沒有辦法加快這個查詢或不同的查詢來執行同樣的事情?
uj5u.com熱心網友回復:
我建議你使用Join。應該表現更好:
SELECT s1.*
FROM s1
INNER JOIN (select distinct Salary from s1) q ON s1.Salary = q.Salary
uj5u.com熱心網友回復:
您可以使用 CTE 將資料限制為僅 r1 不同的資料,然后將其加入我想的 CTE
WITH R_CTE
AS
(
SELECT DISTINCT SALARY FROM R1
)
SELECT * FROM S1 S JOIN R_CTE R ON R.SALARY = S.SALARY
uj5u.com熱心網友回復:
在兩個表中的薪水列上創建索引:
create index ix1 on s1(salary)
create index ix1 on r1(salary)
這應該會加快匹配速度。
uj5u.com熱心網友回復:
在索引上使用EXISTS,而不是使用DISTINCT.
創建索引:
create index ix1 on r1 (salary);
然后,查詢可以采用以下形式:
select *
from s1
where exists (select 1 from r1 where r1.salary = s1.salary)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484574.html
