2012-06-26 127 views
0

我有一個MySQL查詢很簡單,但運行速度非常慢。我有兩個表corporate_main_membercorporate_main_corporate_membership,我運行下面的查詢:簡單的Mysql查詢運行緩慢

SELECT m.gender FROM corporate_main_member m, corporate_main_corporate_membership cm where m.id = cm.FK_member_ID and cm.FK_corporation_id = 6 

當我不包括第二個條件(cm.FK_corporation_id = 6),查詢運行正常....

+2

在FK_corporation_id上創建一個索引。 –

+0

知道這兩個表中有多少數據也很有趣? – dom

+0

什麼是「慢」?您是否嘗試過運行此查詢的子部分並對其進行計時?這可以幫助您確定瓶頸在哪裏。 –

回答

1

使用JOIN關鍵字查詢並在FK_corporation_id上創建一個索引。

SELECT m.gender 
FROM corporate_main_member m 
     INNER JOIN corporate_main_corporate_membership cm 
       ON m.id = cm.fk_member_id 
WHERE cm.fk_corporation_id = 6 
+0

非常感謝。 fk_corporation_id是一個外鍵。我們可以在其上添加另一個索引嗎?對於這個簡單的問題,我是初學者很抱歉 – user557105

+0

是的,如果表中已經定義了聚集索引(PK),那麼您可以在任何列上添加非聚集索引(在您的案例的FK上)。 –

+0

加入索引並沒有解決問題。在具有相同數據庫的另一臺計算機上,查詢執行正確 – user557105

1

這是更有效的上述查詢形式。

SELECT 
m.gender 
FROM corporate_main_member m, 
corporate_main_corporate_membership cm on(m.id = cm.FK_member_ID) 
where cm.FK_corporation_id = 6 

雖然您可以在corporate_main_corporate_membership上創建索引。

0
SELECT 
    m.gender 
FROM corporate_main_member AS m 
    LEFT JOIN corporate_main_corporate_membership AS cm 
ON m.id = cm.FK_member_ID 
    AND cm.FK_corporation_id = 6