2013-11-21 68 views
0

我有兩個內連接在我的SQL查詢:兩個內連接導致執行速度慢

SELECT `M`.`msg_id`, 
     `U`.`username`, 
     `U`.`seo_username` 
FROM `newdb2`.`users` AS `U` 
INNER JOIN (SELECT subscriber_to_id 
      FROM subscriptions 
      WHERE subscriber_id = 434) AS subscriber 
    ON id = subscriber_to_id 
INNER JOIN `newdb2`.`messages` AS `M` 
    ON (`M`.`uid_fk` = `U`.`id`) 
ORDER BY id DESC LIMIT 10 

當我執行此查詢我看實在是太慢了。 如何修改thi?查詢以使其更快?

+0

有多少行有thoose表? –

+0

列出您擁有的索引。 –

回答

0

像這樣的事情的快速修復正在添加索引,它允許您的數據庫服務器快速查找您正在搜索的列。 For more info on how to add indexes to columns, see the manual

在此查詢,這些列是:

  • subscriptions.subscriber_id
  • subscriptions.subscriber_to_id
  • users.id
  • messages.uid_fk

ORDER BY id應該OK因爲我認爲你的id列已經有一個主鍵索引了,但是排序查詢也會降低速度。

子選擇查詢也會減慢查詢速度。在這個特定的查詢中,我看不到任何地方使用的別名subscriber(包含子查詢的結果,即inner join),因此完全刪除該連接。