最代码官方
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中
最近下载