`
lijiejava
  • 浏览: 262367 次
  • 性别: Icon_minigender_1
  • 来自: 南通
社区版块
存档分类
最新评论

MySQL性能优化 利用limit分页

阅读更多
博客已转至:http://www.muxuanli.com/lmx

MySQL 数据库的limit支持如下形式的选择:  limit n,m
表示从第n条记录开始选择m条记录。而大多数开发人员喜欢使用这类语句来解决Web中经典的分页问题。对于小规模的数据,这并不会有太大的问题。对于论坛这类可能具有非常大规模数据的应用来说,limit n,m 的效率是十分低的。因为每次都需要对数据进行选取。如果只是选取前5条记录,则非常轻松和容易;但是对100万条记录,选取从80万行记录开始的5条记录,则还需要扫描记录到这个位置。—《MySQL技术内幕》


从上文可知,limit 10000,20意味着扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行;问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。

测试: 表t_test_data 存130万条数据
1. select * from t_test_data limit 0,10 


2. select * from t_test_data limit 100000,10 


3. select * from t_test_data limit 1000000,10



上述测试数据可见,10万条数据耗时约2.8秒,而百万条数据耗时达到18秒!

explain select * from t_test_data limit 1000000,10    type 值为all 全表扫描,影响性能。

如何优化???

优化的关键是要做到让MySQL每次只扫描10条记录,我们可以使用limit n,这样性能就没有问题,因为MySQL只扫描n行。我们可以通过子查询先获取起始记录的id,然后利用 select * from t_test_data where id > x limit 10 来实现。

Step1 : 获取起始id,假设起始记录是1000000
      select id from t_test_data limit 1000000, 1




耗时近27秒! 给id加索引之后,再测试,耗时02~0.3秒【ps:100多万数据,创建index耗时约37秒】

Step2 : limit 查询

select * from t_test_data where id >= (select id from t_test_data limit 1000000, 1) limit 10




参考:
http://database.51cto.com/art/201005/200395.htm
http://www.111cn.net/database/mysql/50921.htm
分享到:
评论

相关推荐

    关于Mysql分页的两种方法,假分页和limit分页

    然而,随着偏移量(offset)的增长,LIMIT分页的性能会逐渐下降,因为MySQL需要遍历到偏移量位置才能开始返回结果,对于大数据集来说,这可能会变得非常慢。 为了解决LIMIT分页的性能问题,可以采用一些优化策略。...

    mysql分页之limit优化技巧

    本文档针对mysql分页之limit慢的问题,使用联合索引在大数据量的情况下优化limit分页的性能

    MYSQL分页limit速度太慢的优化方法

    MySQL中的分页查询是Web应用中常见的操作,但随着数据量的增长,`LIMIT`语句在处理大量数据时性能会显著下降。特别是当`OFFSET`值增大时,MySQL需要扫描更多的行来找到需要的数据,这可能导致查询速度变慢,甚至对...

    如何优化Mysql千万级快速分页

    MySQL 千万级快速分页优化方案 在实际开发中,我们经常会遇到 MySQL 数据库的性能问题,特别是在处理千万级数据时,分页查询的性能会变得非常慢。在这篇文章中,我们将探讨如何优化 MySQL 千万级快速分页,详细介绍...

    mysql分页的limit参数简单示例

    Mysql的分页的两个参数 select * from user limit 1,2 ... 您可能感兴趣的文章:详解MySQL的limit用法和分页查询语句的性能分析MYSQL分页limit速度太慢的优化方法mysql limit分页优化方法分享Mysql limit

    mysql性能优化视频教程

    #### 三、分页优化 1. **使用LIMIT语句**:限制返回行数,减少数据传输量。 2. **避免使用ORDER BY + LIMIT组合**:这种组合会导致全表扫描。 3. **使用索引辅助分页**:通过在排序字段上建立索引来提高分页效率。 ...

    MySQL Limit性能优化及分页数据性能优化详解

    MySQL Limit可以分段查询数据库数据,主要应用在分页上。虽然现在写的网站数据都是千条级别,一些小的的优化起的作用不大,但是开发就要做到极致,追求完美性能。下面记录一些limit性能优化方法。 Limit语法: ...

    mysql数据库实现分页

    总结,MySQL的分页功能是处理大数据量查询的关键技术,通过合理使用`LIMIT`和`OFFSET`,配合索引优化,可以有效地提高查询效率,提升用户交互体验。同时,随着版本升级,MySQL提供了更多分页策略和技术,如窗口函数...

    高效的MySQL分页

    高效的分页查询对于优化数据库性能至关重要。本篇文章将探讨如何在MySQL中实现高效的分页,以及相关工具和源码的使用。 首先,我们来了解分页的基本原理。在SQL中,最简单的分页查询通常使用`LIMIT`和`OFFSET`...

    Mysql Limit 分页查询优化详解

    总的来说,MySQL LIMIT分页查询的优化主要集中在减少不必要的行扫描、利用索引以及采用更适合大数据量的查询策略。通过这些方法,可以显著提升分页查询的性能,尤其是对于那些需要跳过多行的情况。在实际应用中,应...

    MySQL 百万级分页优化(Mysql千万级快速分页)

    ### MySQL 百万级分页优化(Mysql千万级快速分页) #### 背景与挑战 在处理大规模数据集时,例如拥有数百万乃至数千万条记录的数据库表,传统的分页查询方法可能会遇到性能瓶颈。特别是使用`LIMIT`进行分页时,随着...

    mysql+spring mvc 实现分页

    总结,MySQL+Spring MVC实现分页涉及数据库分页原理、Spring MVC的分页支持、Spring Data JPA的便捷性、前端分页展示以及性能优化等多个方面。理解并熟练运用这些知识点,可以构建出高效且用户体验良好的Web应用。

    使用limit,offset分页场景时为什么会慢

    推荐阅读《MySQL技术内幕 InnoDB存储引擎》和《高性能MySQL》这两本书,它们可以帮助我们更好地理解MySQL的内部机制,包括多版本并发控制(MVCC)、索引实现、文件存储等,从而制定更有效的查询优化策略。...

    mysql limit分页优化详细介绍

    总的来说,MySQL的LIMIT分页优化是数据库性能调优的重要环节。通过巧妙地改变查询方式,合理利用索引,以及调整应用程序设计,可以显著改善LIMIT分页查询的性能。在处理大数据集时,这些优化技巧显得尤为重要,因为...

    accss, mysql asp通用分页自定义分页样式

    对于分页,我们需要计算总记录数,然后根据每页显示的记录数来确定页码,并通过SQL的`LIMIT`子句(在MySQL中)或`TOP`子句(在Access中)来限制返回的数据量。 接下来,我们来看看自定义分页样式。在网页设计中,...

    JSP+MYSQL+Java类优化分页的实例

    这里采用了`LIMIT` SQL语句来实现分页查询,是MySQL特有的语法,能够提高查询效率。 - **getPageCount** 方法:计算总页数。首先通过执行SQL计数语句获取总记录数,然后根据每页显示的记录数计算出总页数,确保即使...

Global site tag (gtag.js) - Google Analytics