mysql性能优化及 Comparison method violates its general contract
项目上嵌套结果集查询,查询的列表再根据每个id进行查询计算,嵌套的sql如下:
SELECT SUM(IFNULL(t.out_rate,0)) totalOutRate, SUM(IF(IFNULL(t.pre_power,0)-IFNULL(t.power,0)<0,0,IFNULL(t.pre_power,0)-IFNULL(t.power,0))) totalPower
FROM ( SELECT i.id id,i.`station_id` station_id,i.`out_rate` out_rate,i.`upload_datetime` upload_datetime,i.power 'power',@i.power pre_power,@i.power:=i.power tem FROM data_inverter i,
(SELECT @i.power:=0) s WHERE i.`upload_datetime`='201712131020' AND i.`del_flag`=0 AND i.`station_id`='f45ca4ba3xxxxxx28003f5ca83137f6c' ORDER BY i.`upload_datetime` DESC) t
WHERE t.station_id='f45ca4xxxxxxx03f5ca83137f6c'
当数据库数据较少时候都没问题,但是数据库数据到达一定数量后,请求服务总是超时,查看日志发现sql语句正常,但是总是报服务响应超时,然后就觉得是sql的性能,于是对上面语句进行explain分析如下:

对上面的station_id创建索引后

在对upload_datetime创建索引后如下:

这样一对比,性能明显好转多了,但是又遇到其他问题,我程序中用到了map排序,现在报错为:
Comparison method violates its general contract!也就是说比较排序违反了一般规律。
然后网上查询最后更改代码如下解决
Collections.sort(monitorList, new Comparator<Stu>() {
@Override
public int compare(Stu p1,Stu p2) {
return p1.getWd().compareTo(p2.getWd());
/*if(p1.getWd()>p2.getWd()){
return 1;
}
else if(p1.getWd()==p2.gd()){
return 0;
}
else{
return -1 ; // 调用String中的compareTo()方法
}*/
}
}
之后,这个问题得到解决,然而当我将项目部署上以后,查询跨度拉大以后,又出现了服务器的问题错误信息主要包含:Last error is: Invoke remote method timeout.因为我们这个需求中没有关于分页的查询,所以,我怀疑是没有分页导致的问题,于是我就测试一下分页对查询性能的影响,首先,对mysql进行设置,查询后查看耗时
1 show profiles;
2 show variables;查看profiling 是否是on状态;
3 如果是off,则 set profiling = 1;
4 执行自己的sql语句;
5 show profiles;就可以查到sql语句的执行时间;
执行几次 后结果如下:

所以页容量越小查询效率也就越高。
mysql性能优化及 Comparison method violates its general contract的更多相关文章
- JDK7的Comparison method violates its general contract异常
1.摘要 前一阵遇到了一个使用Collections.sort()时报异常的问题,跟小伙伴@zhuidawugui 一起排查了一下,发现问题的原因是JDK7的排序实现改为了TimSort,之后我们又进 ...
- java-collections.sort异常Comparison method violates its general contract!
转载:http://www.tuicool.com/articles/MZreyuv 异常信息 java.lang.IllegalArgumentException: Comparison metho ...
- Comparison method violates its general contract
生产环境出现的错误排查,错误log如下 java.lang.IllegalArgumentException: Comparison method violates its general contr ...
- 解决“Comparison method violates its general contract!”
The ONE跑MaxProp.Prophet可能(取决于你JDK的版本)会报“java.lang.IllegalArgumentException: Comparison method violat ...
- 排序遇到问题 JDK7的Comparison method violates its general contract
图解JDK7的Comparison method violates its general contract异常 楼主分析的很详细,能力有限,我看得迷迷糊糊的,不过大致知道这个错误的起因了.学习了,谢 ...
- Comparison method violates its general contract 解决
java.lang.IllegalArgumentException: Comparison method violates its general contract! 原因 JDK7中的Collec ...
- 解决 Comparison method violates its general contract!
问题:Comparison method violates its general contract!报错 Collections.sort(list, new Comparator<Integ ...
- 关于jdk7中 使用Collections的排序方法时报Comparison method violates its general contract!异常
参考: Comparison method violates its general contract Comparison method violates its general contract! ...
- [ Error 分析] Comparison method violates its general contract!
public static void main(String[] args) { List<Long> ret = new ArrayList<>(); int n = 103 ...
随机推荐
- SQL SERVER用户表信息
可以使用下面这个语句查看用户表的相关信息 RowCount 记录数 FileGroup 文件组 PartitionScheme 分区结构 IsPartitioned 是否分区 SELECT tbl.n ...
- Day11 - F - A Dangerous Maze LightOJ - 1027
求期望注意期望的定义,这题我们可以分正负数情况,设所求期望为E 正数: 1/n*x_i 负数:1/n*(E+x_j) 此时概率为1/n,根据期望定义,他回到起点后出去的期望为E,花费回起点的时间为x_ ...
- Java Web 前端资源文件的路径问题
WEB-INF是Java Web应用的安全目录,在部署时用于存放class文件.项目用到的库(jar包).Java Web应用的配置文件web.xml. 浏览器不能访问此目录下的资源,比如在WEB-I ...
- 企业行业分类数据库JSON
这篇文章主要介绍了 企业信息中选择行业类型,常用在企业注册,入驻填写企业信息等. JSON: [{"id":1001,"name":"IT服务&quo ...
- CentOS7配置python3教程
环境准备: 1.python3.7.1 下载地址:https://www.python.org/ 注意:CentOS7默认就有python2的 2.虚拟机CentOS 7 64位,下载地址:ht ...
- nginx 的请求处理阶段
nginx处理的11个阶段 nginx处理用户请求的流程 接收用户请求头部之后 1 .匹配对应得location 2.是否进行限速 3.验证用户是否有权限访问该资源:和判断是否是盗链的请求 4.生成用 ...
- 【转载】 NVIDIA Tesla/Quadro和GeForce GPU比较
原文地址: https://blog.csdn.net/m0_37462765/article/details/74394932 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议 ...
- 关于and 和or的执行优先级问题分析
题目:列出本店价低于60或者高于100.并且商品点击数大于628的商品. 按照下面两种写法,得到的结果是不同的. 第一种:结果数据中有点击数为628的记录,显然不符合题目要求. SELECTgoods ...
- 吴裕雄--天生自然 JAVA开发学习:java使用Eclipel连接数据库
1:jar可到Mysql官网下载:地址Mysql 连接jar包.:https://dev.mysql.com/downloads/connector/j/如图,在下拉列表框中选择Platform In ...
- (任意进制转换)将 r 进制数转成 k 进制数
我们知道任意进制转换为十进制,都是乘以基数的多少次方,然后相加: 十进制转换为任意进制,都是除以基数,然后倒着取余数: 所以这里是用十进制数中转,实现任意进制数的转换 #include<iost ...