`

MySQL优化一之limit优化

 
阅读更多

 

1.limit的几种形式

   limit m,n 从m条后一条往后取n条数据,如0,10就是从第一条开始取10条数据。

   limit n  --> limit 0,n  --> limit 0 offset n

 

2.问题:

   我们都知道MySQL分页使用limit,是不是所有的分页我们都可以使用limit呢?

 

3.结论:

   当然不是啦,大表的时候limit 10000,10 的时候MYSQL会扫描满足条件的100010行然后取后面的10行,

 如果limit的这个值很大的话,当然扫描的行数就变多了,所以查询时间会变慢。

 

 4.优化 

    整个表的数据量在100W条左右。

    方法一:子查询

    从 SELECT * FROM `mytest`.`table_rm001` ORDER BY id DESC  LIMIT 100000,50;

    到 SELECT * FROM `mytest`.`table_rm001` where id >  (select id  from `mytest`.`table_rm001` order by id limit 100000,1) limit 50

    多次测试了下时间发现性能还是提高很多的。

    第一条SQL平均在400ms左右,第二条SQL平均在60ms左右。

 

    方法二:超过一半反向查找 

    正向查找: (当前页 – 1) * 页长度

    反向查找: 总记录 – 当前页 * 页长度 

 

 

建表语句:
CREATE TABLE `table_rm001` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `varchar` varchar(32) DEFAULT NULL,
  `tinyint` tinyint(4) DEFAULT NULL,
  `smallint` smallint(6) DEFAULT NULL,
  `mediumint` mediumint(9) DEFAULT NULL,
  `bigint` bigint(20) DEFAULT NULL,
  `integer` int(11) DEFAULT NULL,
  `float` float DEFAULT NULL,
  `real` double DEFAULT NULL,
  `decimal` decimal(10,0) DEFAULT NULL,
  `boolean` tinyint(1) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  `time` time DEFAULT NULL,
  `year` year(4) DEFAULT NULL,
  `text` text,
  `blob` blob,
  PRIMARY KEY (`id`),
  KEY `idx_float` (`float`),
  KEY `idx_varchar` (`varchar`)
) ENGINE=MyISAM AUTO_INCREMENT=3000001 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT |

 

 

 

 

分享到:
评论

相关推荐

    mysql分页之limit优化技巧

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

    MySQL数据库查询优化

    课程大纲: 第1课 数据库与关系代数 综述数据库、关系代数、查询优化技术 综述数据库调优技术 预计时间1小时 第2课 数据库查询优化技术总揽 ...真正认识、掌握MySQL的查询优化技术,大步流星步入查询优化的高手之列。

    mysql limit分页优化详细介绍

    今天发现一篇文章写了些关于limit优化的,很不错。 文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行...

    Mysql优化技巧之Limit查询的优化分析

    前言 在实际业务中对于分页来说是一个比较常见的业务需求。那么就会使用到limit查询,当我们在使用Limit查询的时候,在数据比较小、或者只查询前面一部分数据的时候...mysql> SELECT * FROM student LIMIT 1000000,1

    mysql分页的limit参数简单示例

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

    mysql优化limit查询语句的5个方法

    mysql的分页比较简单,只需要limit offset,length就可以获取数据了,但是当offset和length比较大的时候,mysql明显性能下降 1.子查询优化法 先找出第一条数据,然后大于等于这条数据的id就是要获取的数据 缺点:...

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

    主要介绍了MYSQL分页limit速度太慢的优化方法,需要的朋友可以参考下

    mysql limit查询优化分析

    LIMIT接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。为了与 PostgreSQL ...

    MYSQL优化详情大全

    MySQL优化是指通过调整数据库的配置和优化查询语句等方式来提高MySQL数据库的性能和效率。 以下是一些常见的MySQL优化方法和技巧的描述: 优化数据库结构:设计良好的数据库结构可以提高查询效率。包括正确选择...

    Mysql Limit 分页查询优化详解

    主要介绍了Mysql Limit 分页查询优化的相关资料,非常不错,介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下

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

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

    详解mysql的limit经典用法及优化实例

    详细介绍了mysql的limit经典用法及优化实例,有需要的朋友可以参考一下

    mysql limit分页优化方法分享

    今天发现一篇文章写了些关于limit优化的,很不错。 文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行...

    MySQL查询优化:LIMIT 1避免全表扫描提高查询效率

    在某些情况下,如果明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高查询效率。 例如下面的用户表(主键id,邮箱,密码): 代码如下: create table t_user( id int primary key auto_increment, email varchar(255)...

Global site tag (gtag.js) - Google Analytics