mysql千万级数据量下的分页查询性能优化问题

x业精于勤x 2016-06-11 09:25:36
刚刚到一家新公司,让我优化一下数据库查询性能。
一个资源管理平台,里面的所有资源都在这张表,数据量大概700多万。
字段也相对较多,索引大概5.6个,ID是自增城类型
页面的查询条件也有6个,包括下拉框和模糊查询
分页查询的时候按照每页显示10条的话会有近70万的分页


问题:
执行count统计总记录数时和分页查询时因为有固定的where条件使用到了!=符号,导致不执行索引查询需要一分钟,如果有查询条件的话最多会5分钟,不过是业务逻辑好像也没什么好办法。
去掉排序后性能得到一定的提升,但是不再按时间进行排序了而是按ID,再者就是越是页码数越大的页面,查询速度越慢。
至于什么count(id)还是count(*)这种问题上不能根本性解决问题,最关键还是因为!=符号查询需要50多秒,而使用=符号查询在10秒内,各位大神求指导有什么好的办法进行优化。
...全文
1859 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天老猿 2018-07-03
  • 打赏
  • 举报
回复
根据id规则及索引特性直接用id来计算分页就行了
c_sdn_shang_bu_qi 2016-06-17
  • 打赏
  • 举报
回复
建议把执行计划和sql贴出来。 我 看根本原因在于模糊查询。。。 700万数据优化没什么难度。。。 思路: 1,分区表(要看sql条件才知道,选择什么字段分区) 2,sql尽量用主键id分页检索数据 3,问题不在于!=和count(id),可能是sql写法原因,还是要看执行计划 4,模糊查询考虑全文索引。
cdutfly 2016-06-12
  • 打赏
  • 举报
回复
有没有必选条件?有没有联合索引?
x业精于勤x 2016-06-12
  • 打赏
  • 举报
回复
那即便显示的时候不显示全数据,表分区后在执行条件查询的情况下你如何去查表呢?
zhu19774279 2016-06-12
  • 打赏
  • 举报
回复
分区?分表? 我看数据比较多的网站,比如搜索引擎或CSDN都不提供全数据分页; 京东、淘宝的处理方法是最近一年的数据放在一个表里,其他数据放在另一个表里。
x业精于勤x 2016-06-12
  • 打赏
  • 举报
回复
现在的解决方案是数据量也就是count统计使用了联合索引,同时去掉了一个where提交,能在12s内显示出来,分页数据查询使用了子查询的方式,大致能在10s左右,但是如果是查询最后一页还是会比较慢,有没有更好的方案呢?
致命的西瓜 2016-06-12
  • 打赏
  • 举报
回复
查询条件不变建议考虑分表,700W数据分页没有必要

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧