遇到的Mysql优化问题
来源:互联网 发布:mac修容 编辑:程序博客网 时间:2024/06/05 03:20
前几天为一个保险公司做一个咨诉系统,其中有个功能是统计报表。要求是这个报表在mysql中跑要两秒以内查询出结果,在系统之中查询要在七八秒之内,而数据量也会在百万级别以上。
本身mysql的查询性能就稍微差一些,而且mysql连表查询的效率更是差强人意。由于开始的表的设计原因,有些统计数据要在连表中来查询,而且要求的时间期限是一年以内的数据。
开始写了一个逻辑的sql,一旦数据量超过一万,那速度简直是老牛拉磨一般,后来加上索引,又对不必要的逻辑进行优化,还是很慢。
后来发现好多的索引并没有走,原因有几个:
1、连表子查询的字段对应的格式不同,有的是int类型,有的是varchar类型。
2、连表子查询的两个表的varchar字符集居然不同,新的表示utf-8mb4的,而老的表示utf-8的。这就导致连表查询的时候回现将utf-8的字符集挨个转换为utf-8mb4,然后在进行查询,这速度简直是老牛拉磨一般。没办法只能每次查询之前现将字符集转换为utf-8。发现速度相差十倍不止。
3、时间格式不同也会导致不走索引,当时间格式为date类型或者datetime类型的时候,要注意转换一下。
虽然速度要比原来快好几十倍,但是当数据量达到百万数据量,特别是连表子查询中其他的表数据量达到几百万的时候,依然是非常的慢。原因有两个:
1、因为要和一年以内的时间比对计算重复率,所以当用到函数DATE_SUB(时间字段, INTERVAL 1 DAY)的时候,明显速度被拖慢。
2、因为要做翻页,所以要先计算count值,这个也会被拖慢。
如何优化这两个问题呢?看来还得研究一下。
—————————————————分割线———————————
前几天一直在做webService接口,这几天断断续续有开始研究之前那个报表查询效率问题。因为查询效率没法达到甲方的要求,所以尝试了一种解决方案,就是做一个定时任务,每天晚上跑报表里面前一年的数据,将计算结果存到一个新表里面,然后在使用的时候连表查询,这样就避免了复杂的逻辑查询拖慢查询速度。
但是实际上定时任务批处理效率居然非常高,而抛开了复杂查询的报表依然还是很慢,不知道是因为优化的方向不对还是说已经没有余地可以再进行优化,只能更改功能实现方式或者需求。
今天是17-8-20,再次做个记录。
- 遇到的Mysql优化问题
- Mysql优化中遇到的问题和感受
- mysql中遇到的问题,以及一些优化对策
- MySQL遇到的问题
- mysql 遇到的问题
- mysql 遇到的问题
- mysql-遇到的问题
- mysql遇到的问题
- mysql遇到的问题
- mysql遇到的问题
- mysql-遇到的问题
- mysql-遇到的问题
- MySQL的优化问题
- Mysql的优化问题
- 安装mysql遇到的问题
- 重装mysql遇到的问题
- mysql安装遇到的问题
- 使用mysql遇到的问题
- quartz定时任务调度器开发Java Product自动运行项目
- Mysql系列二 mysql语法总结
- session 共享问题
- Python爬虫知识(3)—— xpath 选择器
- 2017多校训练赛第二场 HDU 6051 (数论)——By alpc_wh
- 遇到的Mysql优化问题
- jquery表格动态增删改及取数据绑定数据完整方案
- 两个.c文件访问同一个全局变量的用法
- Mac Maven
- 实训--day19Python
- webview设置网页加载进度条和设置点击返回键
- Android基于XMPP协议之asmack源码分析
- Java 线程池艺术探索
- java.lang.NumberFormatException: null的解决方法