4

谁能帮我优化这个查询,

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 完全是两个不同的列

4

4 回答 4

2

不要使用子查询,而是将 TABLEBB 和 TABLECC 连接到 TABLEAA,并在 WHERE 子句中检查两个连接表的 ZZ=SLECTED。

确保参与外部联接的列已编入索引。

于 2013-07-11T22:18:30.480 回答
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'

此外,确保您在 AY、BY 和 CY 上具有适当的索引。通过在 Z 列上添加索引可能会发现更好的性能——这取决于您的表结构和其他几个因素。

于 2013-07-11T22:19:46.727 回答
0

索引...

  • Z在 in 中添加索引TABLEBB
  • ZZ在 in 中添加索引TABLECC
  • Y在 in 中添加索引TABLEAA
于 2013-07-11T22:19:33.097 回答
0
SELECT X1, X2 FROM TABLEAA 
JOIN TABLEBB ON Y = Y JOIN TABLECC ON Y = Y 
WHERE TABLEBB.Z = SLECTED && TABLECC.ZZ = SLECTED
于 2013-07-11T22:19:39.217 回答