最代码官方
2015-11-30 18:38:20
原证精
mysql创建多列索引查询百万表数据的性能优化经验分享
最近发现最代码网站中的收到的评论,提到我的,心情被赞的查询异常缓慢,通过nginx日志发现响应时间快的在5s,慢的有13s,终于忍无可忍花时间来解决了。
执行explain之后的截图如下:
可以看到possible_keys中有很多是之前无用的index,并没有按预想的多列索引status,source_user_id,type来查询,于是果断去掉了多余的索引,执行explain后截图:
可以看到虽然用到了status_sourceuserid_type索引,但rows反而更大了,可以想象查询时间还肯定会更慢吧。
于是修改了索引的列顺序为:
1 | mysql> alter table javaniu_event drop index status_sourceuserid_type; |
2 | Query OK, 0 rows affected (0.19 sec) |
3 | Records: 0 Duplicates: 0 Warnings: 0 |
4 |
5 | mysql> alter table javaniu_event add index sourceuserid_status_type(source_user_id, status, type); |
6 | Query OK, 0 rows affected (14.47 sec) |
7 | Records: 0 Duplicates: 0 Warnings: 0 |
执行explain后截图
之后研究了下mysql索引的机制,发现多列索引是按建立索引的列的顺序来顺序过滤数据的,所以按event的业务规则来说,肯定是先用户来区分动态,之后再按动态类型,最后再按动态状态来查询,于是最终调整索引顺序为:
1 | mysql> alter table javaniu_event drop index sourceuserid_status_type; |
2 | Query OK, 0 rows affected (0.14 sec) |
3 | Records: 0 Duplicates: 0 Warnings: 0 |
4 | mysql> alter table javaniu_event add index sourceuserid_type_status(source_user_id,type,status); |
5 | Query OK, 0 rows affected (16.02 sec) |
6 | Records: 0 Duplicates: 0 Warnings: 0 |
执行explain后截图:
网页点击我收到的评论列表时明显响应要快很多。
平时多总结分享不只是对自己学到的知识的巩固,也是可以和其他技术交流学习的机会,牛牛们可以多静心分享下相关的经验和代码。
猜你喜欢
- mysql经纬度查询并且计算2KM范围内附近用户的sql查询性能优化实例教程
- Mysql低效的where 1=1性能测试
- mySql启动和关闭.bat文件(需要管理员权限)
- echart通过jsp连接查询mysql的demo
- Spring+Spring MVC+MyBatis整合实现junit查询mysql数据库
- 我写的备份mysql数据库的代码
- Java备份恢复Mysql
- Java在线备份和还原MySQL数据库脚本代码
- mysql数据库动态添加字段设计
- 分享weibo4j中用到的mysql2bean的java工具
- java直接连接mysql数据库的代码
- Spring mvc整合mybatis基于mysql数据库实现用户增删改查及其分页显示的完整入门实例
请下载代码后再发表评论

- mySql启动和关闭.bat文件(需要管理员权限)
- Mysql低效的where 1=1性能测试
- 我写的备份mysql数据库的代码
- Java备份恢复Mysql
- Java在线备份和还原MySQL数据库脚本代码
- mysql经纬度查询并且计算2KM范围内附近用户的sql查询性能优化实例教程
- mysql数据库动态添加字段设计
- 证精 分享weibo4j中用到的mysql2bean的java工具
- java直接连接mysql数据库的代码
- 原证 Spring mvc整合mybatis基于mysql数据库实现用户增删改查及其分页显示的完整入门实例
- windows下利用任务计划备份mysql数据库
- 原 apache log4j实现日志插入mysql数据库


2602275348 LV12
2024年12月26日
953558449
2024年3月22日
暂无贡献等级
LHLHBBA
2024年3月20日
暂无贡献等级
梦屿Baba
2024年3月8日
暂无贡献等级
卢本伟不开挂 LV4
2023年9月3日
矿泉水 LV30
2023年8月11日
kkkkioio LV7
2023年7月4日
lironggang LV38
2023年4月25日
浪里格朗 LV4
2023年1月31日
zsp13550 LV8
2023年1月6日