在大数据情况下MySQL的一种简单分页优化方法

 更新时间:2015年05月08日 10:13:27   作者:罗龙九  
这篇文章主要介绍了在大数据情况下MySQL的一种简单分页优化方法,分页优化是MySQL优化的常用手段之一,需要的朋友可以参考下

通常应用需要对表中的数据进行翻页,如果数据量很大,往往会带来性能上的问题:

root@sns 07:16:25>select count(*) from reply_0004 where thread_id = 5616385 and deleted = 0;
+———-+
| count(*) |
+———-+
| 1236795 |
+———-+
1 row in set (0.44 sec)
root@sns 07:16:30>select id
from reply_0004 where thread_id = 5616385 and deleted = 0
order by id asc limit 1236785, 10 ;
+———–+
| id    |
+———–+
| 162436798 |
| 162438180 |
| 162440102 |
| 162442044 |
| 162479222 |
| 162479598 |
| 162514705 |
| 162832588 |
| 162863394 |
| 162899685 |
+———–+
10 rows in set (1.32 sec)

索引:threa_id+deleted+id(gmt_Create)
10 rows in set (1.32 sec)
这两条sql是为查询最后一页的翻页sql查询用的。由于一次翻页往往只需要查询较小的数据,如10条,但需要向后扫描大量的数据,也就是越往后的翻页查询,扫描的数据量会越多,查询的速度也就越来越慢。
由于查询的数据量大小是固定的,如果查询速度不受翻页的页数影响,或者影响最低,那么这样是最佳的效果了(查询最后最几页的速度和开始几页的速度一致)。
在翻页的时候,往往需要对其中的某个字段做排序(这个字段在索引中),升序排序。那么可不可以利用索引的有序性来解决上面遇到的问题喃,答案是肯定的。比如有10000条数据需要做分页,那么前5000条做asc排序,后5000条desc排序,在limit startnum,pagesize参数中作出相应的调整。
但是这无疑给应用程序带来复杂,这条sql是用于论坛回复帖子的sql,往往用户在看帖子的时候,一般都是查看前几页和最后几页,那么在翻页的时候最后几页的翻页查询采用desc的方式来实现翻页,这样就可以较好的提高性能:

root@snsgroup 07:16:49>select * from (select id

->      from group_thread_reply_0004 where thread_id = 5616385 and deleted = 0

->    order by id desc limit 0, 10)t order by t.id asc;

+———–+

| id    |

+———–+

| 162436798 |

| 162438180 |

| 162440102 |

| 162442044 |

| 162479222 |

| 162479598 |

| 162514705 |

| 162832588 |

| 162863394 |

| 162899685 |

+———–+

10 rows in set (0.87 sec)

可以看到性能提升了50%以上。

相关文章

  • mysql运行net start mysql报服务名无效的解决办法

    mysql运行net start mysql报服务名无效的解决办法

    这篇文章主要为大家详细介绍了mysql运行net start mysql报服务名无效的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 一文详解MySQL不同隔离级别都使用什么锁

    一文详解MySQL不同隔离级别都使用什么锁

    这篇文章主要为大家详细介绍了在MySQL中不同隔离级别都会使用什么锁,文中的示例代码讲解详细,对我们学习MySQL有一定帮助,需要的可以参考一下
    2022-09-09
  • MySQL定时备份方案(利用Linux crontab)

    MySQL定时备份方案(利用Linux crontab)

    这篇文章主要给大家介绍了关于MySQL定时备份方案的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • 详解MySQL单列索引和联合索引

    详解MySQL单列索引和联合索引

    联合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏进行排序,然后按名字对有相同姓氏的人进行排序,这篇文章主要介绍了MySQL单列索引和联合索引,需要的朋友可以参考下
    2022-09-09
  • Eclipse与MySQL数据库的连接教程(已实操)

    Eclipse与MySQL数据库的连接教程(已实操)

    用eclipse编写的好的代码,我们怎么才能连接到数据库呢?下面这篇文章主要给大家介绍了关于Eclipse与MySQL数据库连接的相关资料,下面的操作是经本人验证,确实可行,需要的朋友可以参考下
    2023-05-05
  • MySQL表的CURD操作(数据的增删改查)

    MySQL表的CURD操作(数据的增删改查)

    数据库本质上是一个文件系统,通过标准的SQL语句对数据进行CURD操作,下面这篇文章主要给大家介绍了关于MySQL表的CURD操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • MySQL中USING 和 HAVING 用法实例简析

    MySQL中USING 和 HAVING 用法实例简析

    这篇文章主要介绍了MySQL中USING 和 HAVING 用法,结合实例形式简单分析了mysql中USING 和 HAVING的功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-08-08
  • MySQL数据库操作DQL正则表达式

    MySQL数据库操作DQL正则表达式

    这篇文章主要介绍了MySQL数据库操作DQL正则表达式,正则表达式描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串
    2022-07-07
  • Windows 8下MySQL Community Server 5.6安装配置方法图文教程

    Windows 8下MySQL Community Server 5.6安装配置方法图文教程

    这篇文章主要为大家详细介绍了Windows 8下MySQL Community Server 5.6安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • MySQL 重装MySQL后, mysql服务无法启动

    MySQL 重装MySQL后, mysql服务无法启动

    把mysql程序卸载后, 重装, 结果mysql服务启动不了,碰到这个问题的朋友可以参考下。
    2011-08-08

最新评论