刚刚到一家新公司,让本人优化一下数据库查询性能。
一个资源管理平台,里面的全部资源都在这张表,数据量大致700多万。
字段也相对较多,索引大致5.6个,ID是自增城类型
页面的查询条件也有6个,包括下拉框和模糊查询
分页查询的时候按照每页显示10条的话会有近70万的分页
一个资源管理平台,里面的全部资源都在这张表,数据量大致700多万。
字段也相对较多,索引大致5.6个,ID是自增城类型
页面的查询条件也有6个,包括下拉框和模糊查询
分页查询的时候按照每页显示10条的话会有近70万的分页
问题:
执行count统计总记录数时和分页查询时原因是有固定的where条件使用到了!=符号,导致不执行索引查询需要一分钟,假如有查询条件的话最多会5分钟,不过是业务逻辑好像也没什么好办法。
去掉排序后性能得到一定的提升,但是不再按时间进行排序了而是按ID,再者就是越是页码数越大的页面,查询速度越慢。
至于什么count(id)还是count(*)这种问题上不能根本性解决问题,最关键还是原因是!=符号查询需要50多秒,而使用=符号查询在10秒内,各位高手求指导有什么好的办法进行优化。
解决方案
10
有没有必选条件?有没有联合索引?
10
建议把执行计划和sql贴出来。
本人 看根本原因在于模糊查询。
700万数据优化没什么难度。
思路:
1,分区表(要看sql条件才知道,选择什么字段分区)
2,sql尽量用主键id分页检索数据
3,问题不在于!=和count(id),可能是sql写法原因,还是要看执行计划
4,模糊查询考虑全文索引。
本人 看根本原因在于模糊查询。
700万数据优化没什么难度。
思路:
1,分区表(要看sql条件才知道,选择什么字段分区)
2,sql尽量用主键id分页检索数据
3,问题不在于!=和count(id),可能是sql写法原因,还是要看执行计划
4,模糊查询考虑全文索引。