任何人都可以帮我优化这个查询,
SELECT(X1,
X2
FROM TABLEAA
WHERE
Y IN (SELECT Y FROM TABLEBB WHERE Z=SELECTED)
AND Y IN (SELECT Y FROM TABLECC WHERE ZZ=SELECTED)
)
在哪里
TABLEAA : 1 million enteries
TABLEBB : 22 million enteries
TABLECC : 1.2 million enteries
它有效,但需要花费太多时间,差不多30秒
还有其他方法可以解决这个问题吗?
编辑:Z和ZZ完全是两个不同的列
答案 0 :(得分:2)
对于两个连接表,不是使用子查询,而是将TABLEBB和TABLECC连接到TABLEAA,并在WHERE子句中检查ZZ = SLECTED。
确保参与外部联接的列已编制索引。
答案 1 :(得分:2)
我会使用JOINs
:
SELECT DISTINCT
A.X1,
A.X2
FROM TABLEAA A
JOIN TABLEBB B ON A.Y = B.Y AND B.Z='SELECTED'
JOIN TABLECC C ON A.Y = C.Y AND C.Z='SELECTED'
另外,请确保在A.Y,B.Y和C.Y上有适当的索引。您可以通过在Z列上添加索引来获得更好的性能 - 这取决于您的表结构和其他几个因素。
答案 2 :(得分:0)
...索引
Z
TABLEBB
添加索引
ZZ
TABLECC
添加索引
Y
TABLEAA
添加索引
答案 3 :(得分:0)
SELECT X1, X2 FROM TABLEAA
JOIN TABLEBB ON Y = Y JOIN TABLECC ON Y = Y
WHERE TABLEBB.Z = SLECTED && TABLECC.ZZ = SLECTED