mysql - 改进 MySQL 查询性能

标签 mysql performance select group-by

我有一个查询,它在两个表 companyquestion 上运行得很好。这两个表的结构如下:

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/

相关文章:

javascript 获取 <select> 的值

通过指针复制复杂的结构

c++ - 返回常量的函数是否比 void 函数慢?

c# - 用 C# 快速更新 MySql 数据库

使用内部查询时 mysql 错误 1175

php - 如何使用 PHP 正确从数据库获取标志值?

c++ - 是否可以使用 select(2) 来监视 SDL 文本输入事件?

mysql - 如何在 MySQL 选择查询中仅指定 LIMIT 中的起始索引?

MySQL 删除预定事件语法 ERROR 1064 (42000)

mysql - 使用 SQL 检索一组记录,然后使用 Rails 对它们进行排序