Mysql高效分页详解

 更新时间:2017年01月19日 08:31:22   作者:zsl10  
这篇文章主要为大家详细介绍了Mysql高效分页的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前言

通常针对MySQL大数据量的查询采取“分页”策略,但是如果翻页到比较靠后的位置时查询将变得很慢,因为mysql将花费大量的时间来扫描需要丢弃的数据。

基本分页技巧

通常情况下,为了实现高效分页,需要在查询中WHERE条件列和排序列应用组合索引。
例如,建立索引(a,b,c)使得以下查询可以使用索引,提高查询效率:

1、字段排序

ORDER BY a 
ORDER BY a,b
ORDER BY a, b, c 
ORDER BY a DESC, b DESC, c DESC 

2、筛选和排序

WHERE a = const ORDER BY b, c 
WHERE a = const AND b = const ORDER BY c 
WHERE a = const ORDER BY b, c 
WHERE a = const AND b > const ORDER BY b, c 

3、下面查询是无法使用以上索引的

ORDER BY a ASC, b DESC, c DESC//排序方向不一致
WHERE g = const ORDER BY b, c // 字段g不是索引一部分
WHERE a = const ORDER BY c //没有使用字段b 
WHERE a = const ORDER BY a, d // 字段d不是索引的一部分 

解决大数据量翻页问题

1、将LIMIT M,N的查询改为LIMIT N
例如,使用LIMIT 10000,20,Mysql将需要读取前10000行,然后获取后面的20行 ,这是非常低效的,使用LIMIT N的方式,通过每页第一条或最后一条记录的id来做条件筛选,再配合降序和升序获得上/下一页的结果集 。
2、限制用户翻页数量
产品实际使用过程中用户很少关心搜索结果的第1万条数据。
3、使用延迟关联
通过使用覆盖索引来查询返回需要的主键,再根据返回的主键关联原表获得需要的行,这样可以减少Mysql扫描那些需要丢弃的行数。

实例:
使用索引(sex,rating)进行查询:

mysql> SELECT <cols> FROM profiles INNER JOIN (
-> SELECT <primary key cols> FROM profiles
-> WHERE x.sex='M' ORDER BY rating LIMIT 100000, 10
-> ) AS x USING(<primary key cols>);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • mysql的事务,隔离级别和锁用法实例分析

    mysql的事务,隔离级别和锁用法实例分析

    这篇文章主要介绍了mysql的事务,隔离级别和锁用法,结合实例形式分析了MySQL事务,隔离级别和锁相关原理、用法及操作注意事项,需要的朋友可以参考下
    2020-02-02
  • 数据库管理中19个MySQL优化方法

    数据库管理中19个MySQL优化方法

    小编给大家总结了19条非常实用的MySQL数据库优化方法,这是每个服务器管理人员都必须知道的,一起学习下。
    2017-11-11
  • MYSQL中查询LONGBLOB类型数据的大小的详细示例

    MYSQL中查询LONGBLOB类型数据的大小的详细示例

    在MySQL中,LONGBLOB 是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,但是,LONGBLOB 数据类型本身并不直接存储数据的大小(长度),它存储的是二进制数据的实际内容,这篇文章主要介绍了MYSQL中怎么查询LONGBLOB类型数据的大小,需要的朋友可以参考下
    2024-06-06
  • Win10安装MySQL5.7.18winX64 启动服务器失败并且没有错误提示

    Win10安装MySQL5.7.18winX64 启动服务器失败并且没有错误提示

    这篇文章主要介绍了Win10安装MySQL5.7.18winX64 启动服务器失败并且没有错误提示,需要的朋友可以参考下
    2017-06-06
  • CentOS7下 MySQL定时自动备份的实现方法

    CentOS7下 MySQL定时自动备份的实现方法

    这篇文章主要介绍了CentOS7 下MySQL定时自动备份的实现方法,主要实现了数据库备份,清理过期备份文件功能,需要的朋友可以参考下
    2019-12-12
  • MySQL 5.7.16 修改密码提示 ERROR 1054 (42S22): Unknown column ''''password'''' in ''''field list''''的原因

    MySQL 5.7.16 修改密码提示 ERROR 1054 (42S22): Unknown column ''''p

    这篇文章主要介绍了MySQL 5.7.16 修改密码提示 ERROR 1054 (42S22): Unknown column 'password' in 'field list'的原因分析及解决办法,需要的朋友可以参考下
    2017-01-01
  • MySQL 编码机制

    MySQL 编码机制

    一般在MYSQL使用中文查询 都是用 set NAMES character
    2008-12-12
  • 关于Mysql子查询的三个应用场景

    关于Mysql子查询的三个应用场景

    这篇文章主要介绍了关于Mysql子查询的三个应用场景,子查询是在一个完整的查询语句中,嵌套不同功能的小查询,从而完成复杂查询的一种编写形式,需要的朋友可以参考下
    2023-07-07
  • MySQL使用命令行备份数据的方法详解

    MySQL使用命令行备份数据的方法详解

    由于长期使用测试环境的数据库,时不时会有脏数据删除不干净,对此很需要一个实时将生产库的数据定期备份一份,防止生产库中会有脏数据进来,所以本文给大家介绍了MySQL使用命令行备份数据的方法,需要的朋友可以参考下
    2024-02-02
  • 手把手教你MySQL运算符

    手把手教你MySQL运算符

    运算符是告诉MySQL执行特定算数或逻辑操作的符号,下面这篇文章主要给大家介绍了关于MySQL运算符的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03

最新评论