如何使用索引最好地连接表

z18hc3ub  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(255)

以下查询运行非常慢。。。

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

leads表有约8000条记录users表有约300条记录comments表有约500000条记录
我有一个关于leads.id、comments.lead\u id、leads.company\u id、users.id和comments.user\u id、comments.sort、comments.reply、comments.id的索引
有人能解释一下如何优化这个查询吗?
查询说明截图

brqmpdu1

brqmpdu11#

移动 leads 到世界第一 from 列表:

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/(fraction of leads with company_id = 1)

相关问题