簡體   English   中英

您將如何優化此MySQL查詢

[英]How would you optimize this MySQL query

任何人都可以幫我優化這個查詢,

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完全是兩個不同的列

對於兩個連接表,不是使用子查詢,而是將TABLEBB和TABLECC連接到TABLEAA,並在WHERE子句中檢查ZZ = SLECTED。

確保參與外部聯接的列已編制索引。

我會使用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列上添加索引可以找到更好的性能 - 這取決於您的表結構和其他幾個因素。

索引...

  • TABLEBBZ添加索引
  • TABLECCZZ添加索引
  • TABLEAAY添加索引
SELECT X1, X2 FROM TABLEAA 
JOIN TABLEBB ON Y = Y JOIN TABLECC ON Y = Y 
WHERE TABLEBB.Z = SLECTED && TABLECC.ZZ = SLECTED

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM