簡體   English   中英

使用LEFT JOIN進行慢速SQL查詢

[英]Slow SQL query with LEFT JOIN

我已經讀過類似的問題,但這對我沒有幫助。

我有疑問

SELECT `login`, 
   `photo`, 
   `username`, 
   `user`.`id`, 
   `name`, 
   `msg_info` 
FROM   `user` 
       LEFT JOIN `friends` 
              ON `friends`.`child` = `user`.`fb_id` 
WHERE  `friends`.`parent` = '1111' 
ORDER  BY `msg_info` DESC 

花費了0.7411秒(甚至更多)

它顯示總共158行(確定,我可以限制它,但是查詢仍然很慢)

每個表好友用戶都有200.000行以上

我該如何做才能更快查詢?

謝謝!

正如評論所指出的,您的左聯接實際上與以下內部聯接查詢沒有什么不同:

SELECT
    login,
    photo,
    username,
    user.id,
    name,
    msg_info
FROM user u
INNER JOIN friends f
    ON f.child = u.fb_id
WHERE
    f.parent = '1111'
ORDER BY
    msg_info DESC;

我們可以嘗試在(parent, child, name, msg_info, ...)friends表上添加索引。 我不確定其他哪些列屬於friends ,但是基本思想是在parent上創建索引,以加快WHERE子句,並希望利用parent列的基數低。 然后,我們包含child列以加快連接速度。 我們還在select子句中包括所有其他列,以使索引覆蓋我們需要的其他列。

CREATE INDEX idx ON friends (parent, child, name, msg_info, ...);

正如@MrVimes所建議的那樣, 有時向JOIN子句中添加條件可能會產生很大的不同:

SELECT login, photo, username, user.id, name, msg_info
FROM user u
INNER JOIN friends f ON f.child = u.fb_id AND f.parent = '1111'
ORDER BY msg_info DESC;

當然,假設您的所有PK和FK均已正確定義和索引。

暫無
暫無

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

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