以下查询运行速度非常慢...
SELECT
CONCAT(users.first_name, ' ', users.last_name) AS user_name,
leads.first_name AS first_name,
comments.*,
FROM comments
INNER JOIN users ON
users.id = comments.user_id
INNER JOIN leads ON
leads.id = comments.lead_id AND
leads.company_id = 1
ORDER BY
`sort` DESC,
reply ASC,
id ASC
LIMIT 80,20
潜在客户表有约 8000 条记录 users 表有约 300 条记录 评论表有约 500,000 条记录
我有一个关于 Leads.id、comments.lead_id、leads.company_id、users.id 和 comments.user_id、comments.sort、comments.reply、comments.id 的索引
有人可以解释一下如何优化这个查询吗?
最佳答案
将线索
移至来源
列表中的第一个位置:
SELECT
CONCAT(users.first_name, ' ', users.last_name) AS user_name,
leads.first_name AS first_name,
comments.*
FROM leads
INNER JOIN comments ON
comments.lead_id = leads.id
INNER JOIN users ON
users.id = comments.user_id
WHERE leads.company_id = 1
ORDER BY
`sort` DESC,
reply ASC,
id ASC
LIMIT 80,20
这允许 leads(company)
上的索引在加入其他表之前立即过滤掉尽可能多的行。
绩效提升应约为 1/(company_id = 1 的潜在客户比例)
关于mysql - 如何使用索引最好地连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51734426/