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

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


卢本伟不开挂 LV4
9月3日
矿泉水 LV30
8月11日
kkkkioio LV7
7月4日
lironggang LV37
4月25日
浪里格朗 LV4
1月31日
zsp13550 LV8
1月6日
手捧阳光 LV6
2022年11月28日
syczzxj LV9
2022年9月23日
ljt289917726 LV3
2022年9月7日
leehow LV2
2022年7月20日