如何使用非索引列查询建有多索引的MySQL数据库
查询实现方式
基础查询写法
直接运行以下SQL即可得到符合条件的Bug总数:
SELECT COUNT(*) AS total_bug_count FROM Bugs WHERE created_at >= '2019-03-01';
说明:如果
created_at是DATETIME/TIMESTAMP类型,传入的'2019-03-01'会被自动解析为2019-03-01 00:00:00,刚好覆盖3月1日零点及之后创建的所有数据,符合需求。
性能注意事项
- 现有联合索引
(category, token, reported_at)对这个查询没有加速效果:联合索引遵循最左前缀匹配规则,本次查询的筛选条件既没有用到索引最左前列的category、token字段,筛选维度也不是索引末尾的reported_at,执行时会走全表扫描。 - 如果表数据量较小(百万行以内),全表扫描的统计速度完全可以接受,不需要做额外调整。
- 如果这个统计查询属于高频调用、且表数据量很大,建议单独为
created_at字段创建索引,大幅降低查询扫描的行数:
-- 按需创建,不要盲目加索引 CREATE INDEX idx_bugs_created_at ON Bugs(created_at);
内容的提问来源于stack exchange,提问作者Abdullah Alshawafi
相关产品推荐
相关产品推荐

