首页 > 数据库 >mysql使用limit分页,随着页码的增大,查询效率越低下;数据混乱且有重复

mysql使用limit分页,随着页码的增大,查询效率越低下;数据混乱且有重复

时间:2023-01-18 15:22:06浏览次数:44  
标签:分页 查询 索引 xx limit mysql 排序 页码

1,对limit分页问题的性能优化方法

利用表的覆盖索引来加速分页查询
我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。

因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。

2,重复数据问题处理:

select * from table order by xx limit 0,10

当xx不存在索引,且有xx相同的行是,可能出现分页数据重复问题

原因:

在MySQL 5.6的版本上,优化器在遇到order by limit语句的时候,做了一个优化,即使用了priority queue。使用 priority queue 的目的,就是在不能使用索引有序性的时候,如果要排序,并且使用了limit n,那么只需要在排序的过程中,保留n条记录即可,这样虽然不能解决所有记录都需要排序的开销,但是只需要 sort buffer 少量的内存就可以完成排序。之所以5.6出现了第二页数据重复的问题,是因为 priority queue 使用了堆排序的排序方法,而堆排序是一个不稳定的排序方法,也就是相同的值可能排序出来的结果和读出来的数据顺序不一致。5.5 没有这个优化,所以也就不会出现这个问题。

解决办法:
1.加上索引排序
select * from table order by xx,id(任意有索引的字段) limit 0,10
2、给xx字段加上索引

标签:分页,查询,索引,xx,limit,mysql,排序,页码
From: https://www.cnblogs.com/zhangliang88/p/17059887.html

相关文章

  • mysql替换字段指定字符
    1、使用REPLACE()函数UPDATE table SETfield=REPLACE(field,'old_string','new_string')......
  • mysql 格式化字符串时间查询
    select`r`.*from`table_aaa`as`r`leftjoin`table_bbb`as`m`on`r`.`idNo`=`m`.`me_no`where((CONVERT(r.money,DECIMAL(10,2))>=1)and(CONVERT(r.......
  • MySQL实战宝典 索引调优篇 14 分区表:哪些场景不建议用分区表
    MySQL实战宝典索引调优篇14分区表:哪些场景不建议用分区表 前面几节,通过索引的原理,索引覆盖的使用,结合复杂SQL的调优,学习了索引设计的各个方面,接下来聊聊分区表的设......
  • linux安装mysql8后的登陆问题
    通过宝塔面板快速安装了mysql8,然后到了要登陆mysql的时候想起来不知道密码,这时候就要强制重置mysql密码了。修改/etc/my.cnf中的mysql配置,添加一句话来跳过密码验证然......
  • Azure ARM (27) 自定义Role,只能创建MySQL Flexible Server资源
    《WindowsAzurePlatform系列文章目录》 用户这里有个新的需求,自定义Role,只能创建MySQLFlexibleServer资源和PrivateDNSZone,不能创建资源资源。可以......
  • MySQL性能优化浅析及线上案例
    作者:京东健康孟飞1、数据库性能优化的意义业务发展初期,数据库中量一般都不高,也不太容易出一些性能问题或者出的问题也不大,但是当数据库的量级达到一定规模之后,如果缺失有效......
  • Docker下安装MySQL8与开启root远程访问
    1.dockersearchmysql#查询mysql版本2.dockerpullmysql:8.0.15#拉取mysql3.创建mysql容器dockerstopmysql_8dockerrmmysql_8dockerrun-d-eTZ=“Asia/Shan......
  • mysql5.7彻底解决sql_mode=only_full_group_by
    打开配置文件windows在安装目录下的my.ini文件Linux在/etc/my.cnf分别在[mysqld]下面添加这段:sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FO......
  • mysql查询怎么区分大小写
    mysql中查询默认是区分大小写的,但是在mysql中默认不区分大小写。解决办法:mysql可以在SQL语句中加入binary来区分大小写。BINARY不是函数,是类型转换运算符,它用来强制它后......
  • 这项评测,华为云GaussDB(for MySQL)顺利通过
    摘要:近日,中国信息通信研究院(简称“中国信通院”)公布了第十五批“可信数据库”评测结果。华为云GaussDB(forMySQL)凭借过硬的技术实力顺利通过“HTAP数据库基础能力评测”......