我有一个查询,它在两个表 company
和 question
上运行得很好。这两个表的结构如下:
company | question
id | id
name | company_id
| sentiment
SELECT company.id as company_id, company.name, question.sentiment,
(SELECT count(*) FROM question
WHERE question.sentiment=0 AND question.company_id=company.id) AS count
FROM question
JOIN company ON company.id=question.company_id
WHERE question.sentiment = 0 GROUP BY company_id ORDER BY count DESC LIMIT 5
我一直在试图弄清楚如何重写它,以避免子查询似乎减慢查询执行速度。 问题表有超过 1000 条记录。 另外,使用索引将执行时间从 545.037 秒减少到 180.228 秒,但我仍然需要改进。
谢谢
最佳答案
ALTER TABLE question ADD INDEX (sentiment, company_id);
SELECT c.id as company_id, c.name, q.sentiment, q.count
FROM company c
JOIN (
SELECT company_id, MAX(sentiment) AS sentiment, COUNT(*) AS count
FROM question
WHERE sentiment = 0
GROUP BY company_id
ORDER BY NULL
) AS q ON c.id = q.company_id
ORDER BY count DESC LIMIT 5
关于mysql - 改进 MySQL 查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894843/