mysql - CASE查询优化
问题描述
SELECT
COUNT(CASE WHEN VALUE = 1 THEN 1 END) AS score_1,
COUNT(CASE WHEN VALUE = 2 THEN 1 END) AS score_2,
COUNT(CASE WHEN VALUE = 3 THEN 1 END) AS score_3,
COUNT(CASE WHEN VALUE = 4 THEN 1 END) AS score_4,
COUNT(CASE WHEN VALUE = 5 THEN 1 END) AS score_5,
COUNT(CASE WHEN VALUE = 6 THEN 1 END) AS score_6,
COUNT(CASE WHEN VALUE = 7 THEN 1 END) AS score_7,
COUNT(CASE WHEN VALUE = 8 THEN 1 END) AS score_8,
COUNT(CASE WHEN VALUE = 9 THEN 1 END) AS score_9,
COUNT(CASE WHEN VALUE = 10 THEN 1 END) AS score_10
FROM
`answers`
WHERE
`created_at` BETWEEN '2017-01-01 00:00:00' AND '2019-11-30 23:59:59'
有没有办法优化这个查询,因为我的数据库中有 400 万条答案记录,而且运行速度很慢?
解决方案
You could try add a redundant composite index
create idx1 on table answers(created_at, value)
using redudance in index the query should be result without accessing to table data just using the index content
推荐阅读
- go - 如何使用反射设置用户定义类型的值?
- firebase - 从 Create React App 部署时,如何解决来自 Firebase 托管的 410 错误响应?
- objective-c - 在图像上应用多个 CIFilter
- performance - 提高我的 PowerShell 脚本的效率
- c# - 在 Selenium 中禁用 Firefox 地理定位提示不起作用
- django - 如何在 Django 模型中集成 postgresql 10/11 声明式表分区(即 PARTITION BY 子句)?
- laravel - Form::select 中的选定选项数组?
- ios - 'NSInternalInconsistencyException',原因:'无法将具有标识符单元格的单元格出列
- python - 从 post-recieve 启动 python 文件
- c - 使用 C 程序计算字符、单词、句子、行或以上所有内容。