mysql - 优化50W-100W表中的SQL查询
问题描述
我得到这个查询:
SELECT
count( * ) AS AGGREGATE
FROM
`report_ifind`
INNER JOIN `report_descriptions` ON `report_ifind`.`seq` =
`report_descriptions`.`report_seq`
AND `description` IS NOT NULL
WHERE
EXISTS (
SELECT
1
FROM
`report_types`
WHERE
report_ifind.seq = report_types.report_seq
AND `type_code` NOT IN ( '002', '001001', '001002', '001003', '099001002',
'009001001', '003001', '003002', '003003', '004002' )
)
AND `isvalid` = 1
AND `report_ifind`.`publish_time` >= '2017-06-24'
本次查询一共有三个表:</p>
report_ifind
report_descriptions
report_types
这些表的索引:
**report_ifind**:
PRIMARY KEY (`id`),
UNIQUE KEY `idx_seq` (`seq`),
KEY `idx_research_id` (`researcher_id`),
KEY `idx_org_id` (`org_id`),
KEY `idx_publish_time` (`publish_time`) USING BTREE,
KEY `idx_sql_publish_time` (`publish_time`,`seq`) USING BTREE
**report_descriptions**:
PRIMARY KEY (`id`),
KEY `idx_report_seq` (`report_seq`)
**report_types**:
PRIMARY KEY (`id`),
KEY `idx_report_seq` (`report_seq`),
KEY `idx_type_code` (`type_code`)
我知道有些事情很糟糕:
一、“desctiption is not null”慢
2、“WHERE EXIST()”慢
3、“SELECT COUNT(*)”速度慢
问题是:如何改进它?
解释输出: 解释
解决方案
3、“SELECT COUNT(*)”速度慢
尝试只计算id
列 ( COUNT(report_ifind.id)
) 而不是计算表中的所有列。
推荐阅读
- mongodb - MongoDB 驱动程序分页
- nlp - word2vec 余弦相似度大于 1 阿拉伯文本
- java - IntelliJ 无法在 Java 1.8.0 下启动:需要 Java 11 或更高版本
- node.js - 如何更新猫鼬中的嵌套数组?
- python - 在 Python 中提取文件的创建时间
- javascript - 项目的 vue.draggable 和持久位置
- azure-data-factory - 如何从 azure 数据工厂中的 Web 活动输出中获取特定字段
- javascript - 未处理的拒绝(TypeError):无法读取未定义 MERN 的属性“长度”
- c - 如何理解 `int (*pixels)[image->size_x];`?
- javascript - ES6 字符串到 ReadableStream