MySQL InnoDB简单SELECT查询耗时0.2秒,如何优化提速?
MySQL查询提速方案
- 给
online_users_count列添加二级索引,这是性价比最高的优化方案
你的查询慢的核心原因是没有对应索引,执行时会扫描全表1.3G的数据。添加索引后查询可以直接走索引统计,不需要回表也不需要全表扫描,执行耗时通常可以降到毫秒级。执行的SQL命令如下:
注:如果是在线生产环境执行加索引操作,建议使用在线DDL避免锁表影响业务,MySQL 5.6及以上版本默认支持在线加索引CREATE INDEX idx_room_lesson_online_users_count ON room_lesson(online_users_count); - 如果该查询是高频的统计类需求,可额外维护汇总表
如果你需要频繁统计不同online_users_count对应的行数,可以新增一张专门的统计汇总表,通过定时任务或者数据库触发器实时更新每个online_users_count对应的行数量,查询时直接读取汇总表即可,响应速度可以达到微秒级。 - 调整数据库缓存配置(辅助优化)
可以适当调大innodb_buffer_pool_size参数,建议设置为物理内存的50%~70%,让更多的表数据缓存到内存中,减少磁盘IO消耗,也能在一定程度上提升查询速度,不过该方案提升幅度远低于加索引。 - 特殊场景可做表分区
如果online_users_count的可选值非常少(比如只有0~5共6个取值),索引选择性差的情况下,可以对room_lesson表按online_users_count做range或者hash分区,查询时只会扫描对应分区的数据,也能大幅降低扫描范围提升速度。
内容的提问来源于stack exchange,提问作者lolcoder
相关产品推荐
相关产品推荐

