[英]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.