-
2020-12-31 03:45:31
limit在分页时可以起到作用但是要如何来使用limit呢,今天我们一起来看看mysql中limit用法及在使用limit分页时的一些细节与优化。
在我看来,limit应该是我们在mysql中最经常使用到的方法了吧,下面我们就来讲解一下limit的作用和如何正确地使用该方法。
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行
//换句话说,LIMIT n 等价于 LIMIT 0,n。
如何优化limit
当一个查询语句偏移量offset很大的时候,如select * from table limit 10000,10 , 最好不要直接使用limit,而是先获取到offset的id后,再直接使用limit size来获取数据。效果会好很多。
如:
select * From customers Where customer_id >=(
select customer_id From customers Order By customer_id limit 10000,1
) limit 10;
有兴趣可以看查limit分页优化教程:http://www.jquerycn.cn/database/mysql/50921.htm
更多相关内容 -
mysql分页的limit参数简单示例
2021-01-21 14:27:37Mysql的分页的两个参数 select * from user limit 1,2 ... 您可能感兴趣的文章:详解MySQL的limit用法和分页查询语句的性能分析MYSQL分页limit速度太慢的优化方法mysql limit分页优化方法分享Mysql limit -
MySQL查询优化:连接查询排序limit(join、order by、limit语句)介绍
2020-09-10 21:46:37两张表连接查询并limit,SQL效率很高,但是加上order by以后,语句的执行时间变的巨长,效率巨低,接下来为大家介绍下连接查询排序limit -
mysql 前几条记录语句之(limit)
2020-12-15 05:25:09您可能感兴趣的文章:Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架mysql limit分页优化方法分享使用Limit参数优化MySQL查询的方法mysql limit查询优化分析Mysql中limit的用法方法详解... -
Mysql Sql查询之Limit 用法
2022-04-14 09:23:45在mysql中,limit关键字主要用于指定查询结果从哪条记录开始显示,一共显示多少条记录;它有3种使用语法“LIMIT 初始位置,记录数”、“LIMIT 记录数”和“LIMIT 记录数 OFFSET 初始位置”。 当数据表中有上万条数据...面试题?
你知道mysql 中limit的用法吗? 你是怎么使用的? 在一条sql语句中 limit 1 表示什么,limit 1,3 又是什么意思?
这道题本人答的很烂。。。。。在mysql中,limit关键字主要用于指定查询结果从哪条记录开始显示,一共显示多少条记录;它有3种使用语法“LIMIT 初始位置,记录数”、“LIMIT 记录数”和“LIMIT 记录数 OFFSET 初始位置”。
当数据表中有上万条数据时,一次性查询出表中的全部数据会降低数据返回的速度,同时给数据库服务器造成很大的压力。这时就可以用 LIMIT 关键字来限制查询结果返回的条数。
LIMIT 是 MySQL 中的一个特殊关键字,用于指定查询结果从哪条记录开始显示,一共显示多少条记录。
LIMIT 关键字有 3 种使用方式,即指定初始位置、不指定初始位置以及与 OFFSET 组合使用。
1.指定初始位置
LIMIT 关键字可以指定查询结果从哪条记录开始显示,显示多少条记录。
LIMIT 指定初始位置的基本语法格式如下:
LIMIT 初始位置,记录数
其中,“初始位置”表示从哪条记录开始显示;“记录数”表示显示记录的条数。第一条记录的位置是 0,第二条记录的位置是 1。后面的记录依次类推。
注意:LIMIT 后的两个参数必须都是正整数。测试表数据
测试1,使用 LIMIT 子句返回从第 4 条记录开始的行数为 5 的记录,SQL 语句和运行结果如下;select * from entry limit 3,5
由结果可以看到,该语句返回的是从第 4 条记录开始的之后的 5 条记录。LIMIT 关键字后的第一个数字“3”表示从第 4 行开始(记录的位置从 0 开始,第 4 行的位置为 3),第二个数字 5 表示返回的行数。不指定初始位置
LIMIT 关键字不指定初始位置时,记录从第一条记录开始显示。显示记录的条数由 LIMIT 关键字指定。
LIMIT 不指定初始位置的基本语法格式如下:
LIMIT 记录数
select * from entry limit 3
结果中只显示了3 条记录,说明“LIMIT 3”限制了显示条数为 3。
其中,“记录数”表示显示记录的条数。如果“记录数”的值小于查询结果的总数,则会从第一条记录开始,显示指定条数的记录。如果“记录数”的值大于查询结果的总数,则会直接显示查询出来的所有记录.
LIMIT和OFFSET组合使用
LIMIT 可以和 OFFSET 组合使用,语法格式如下:
LIMIT 记录数 OFFSET 初始位置
参数和 LIMIT 语法中参数含义相同,“初始位置”指定从哪条记录开始显示;“记录数”表示显示记录的条数。
select * from entry limit 5 OFFSET 3
由结果可以看到,该语句返回的是从第 4 条记录开始的之后的 5 条记录。即“LIMIT 5 OFFSET 3”意思是获取从第 4 条记录开始的后面的 5 条记录,和“LIMIT 3,5”返回的结果相同
-
MySql分页查询limit
2021-06-21 09:21:26分页查询limit 格式: limit 跳过的条数,请求条数(每页的条数) 格式: limit (请求页数-1)*每页条数,每页条数 请求5页的8条 32,8 3页10条 20,10 9页20条 (9-1)*20,20 1. 查询员工姓名和工资按照工资降序排序查询前三条...分页查询limit
格式: limit 跳过的条数,请求条数(每页的条数)
格式: limit (请求页数-1)*每页条数,每页条数请求5页的8条 32,8 3页10条 20,10 9页20条 (9-1)*20,20 1. 查询员工姓名和工资按照工资降序排序查询前三条 select ename,sal from emp order by sal desc limit 0,3; 2. 查询第二页的4条数据 select * from emp limit 4,4; 3. 查询第3页的3条数据 select * from emp limit 6,3; 4. 查询最惨员工信息(工资最低) select * from emp order by sal limit 0,1;
-
MySQL 的 limit 分页查询及性能问题
2022-03-16 11:05:22MySQL 通过 limit 实现分页查询。limit 接收一个或两个整数型参数。如果是两个参数,第一个指定返回记录行的偏移量,第二个指定返回记录行的最大数目。初始记录行的偏移量是 0。为了与 PostgreSQL 兼容,limit 也...MySQL通过 limit 实现分页查询。limit 接收一个或两个整数型参数。如果是两个参数,第一个指定返回记录行的偏移量,第二个指定返回记录行的最大数目。
初始记录行的偏移量是 0
。为了与 PostgreSQL 兼容,limit 也支持limit a offset b
【a:取的记录数;b:索引】。一、分页查询
客户端通过传递 start(页码),pageSize(每页显示的条数) 两个参数去分页查询数据库表中的数据。MySql 数据库提供的分页函数 limit m,n 用法和实际需求不切合,所以就需要根据实际情况去改写适合分页的语句。
1️⃣查询第1条到第10条的数据
select * from table limit 0,10;
—>对应需求就是查询第一页的数据:select * from table limit (1-1)*10,10;
2️⃣查询第11条到第20条的数据
select * from table limit 10,10;
—>对应需求就是查询第二页的数据:select * from table limit (2-1)*10,10;
3️⃣查询第21条到第30条的数据
select * from table limit 20,10;
—>对应需求就是查询第三页的数据:select * from table limit (3-1)*10,10;
由此,得出符合需求的分页 sql 格式是:
select * from table limit (start-1)*pageSize,pageSize;
其中 start 是页码,pageSize 是每页显示的条数。二、性能问题
对于小的偏移量,直接用 limit 查询没有什么问题。随着数据量的增大,越往后分页,limit 语句的偏移量越大,速度也会明显变慢。
优化思想:
避免数据量大时扫描过多的记录解决:
子查询的分页方式或者 JOIN 分页方式。JOIN 分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。一般 MySQL 的主键是自增的数字类型,该情况可以使用下面的方式进行优化。以真实的生产环境的 6 万条数据的一张表为例,比较一下优化前后的查询耗时:
-- 传统 limit,文件扫描 select * from table order by id limit 50000,2; 受影响的行: 0 时间: 0.171s -- 子查询方式,索引扫描 select * from table where id >= (select id from table order by id limit 50000 , 1) limit 2; 受影响的行: 0 时间: 0.035s -- JOIN 分页方式 select * from table as t1 join (select id from table order by id limit 50000, 1) as t2 where t1.id <= t2.id order by t1.id limit 2; 受影响的行: 0 时间: 0.036s
可以看到经过优化性能提高了很多倍。
优化原理:
子查询是在索引上完成的,而普通的查询是在数据文件上完成的。通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。因为要取出所有字段内容,普通查询需要跨越大量数据块并取出,而另一种方式直接根据索引字段定位后,才取出相应内容,效率自然大大提升。因此,对 limit 的优化,是避免直接使用 limit,而是首先获取到 offset 的 id,然后直接使用 limit size 来获取数据。
在实际项目使用,可以利用类似策略模式的方式去处理分页。例如,每页 100 条数据,判断如果是 100 页以内,就使用最基本的分页方式;如果大于 100,则使用子查询的分页方式。
三、limit 优化。使用合理的分页方式以提高分页的效率
- 使用 limit 实现分页逻辑。不仅提高了性能,同时减少了不必要的数据库和应用间的网络传输。
- 查询结果只有一条或者只要最大/最小一条记录,建议用 limit 1。这是为了使explain中 type 列达到 const 类型。“limit 1”可以避免全表扫面,只要找到了对应的一条记录,就不会继续向下扫描了,效率将会大大提高。当然,如果查询字段是唯一索引的话,没必要加 limit 1,因为 limit 的存在主要就是为了防止全表扫描,从而提高性能,如果一个语句本身可以预知不用全表扫描,有没有 limit,性能的差别并不大。
- 使用如下语句做分页的时候,随着表数据量的增加,直接使用 limit 分页查询会越来越慢。
select id,name from product limit 89757, 20
优化如下:可以取前一页的最大行数的 id,然后根据这个最大的 id 来限制下一页的起点。此例中上一页最大的 id 是 89756。SQL 可以采用如下的写法:
//方案一 :返回上次查询的最大记录(偏移量) select id,name from product where id> 89756 limit 20 //方案二:order by + 索引 select id,name from product order by id limit 10000,10 //方案三:在业务允许的情况下限制页数
理由如下:
- 当偏移量最大的时候,查询效率就会越低,因为 MySQL 并非是跳过偏移量直接去取后面的数据,而是先把偏移量+要取的条数,然后再把前面偏移量这一段的数据抛弃掉再返回的。
- 如果使用优化方案一,返回上次最大查询记录(偏移量),这样可以跳过偏移量,效率提升不少。
- 方案二使用 order by+索引,也是可以提高查询效率的。
- 方案三的话,建议跟业务讨论,有没有必要查这么多的分页。因为绝大多数用户都不会往后翻太多页。
【强制】在代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句。
-
mysql select ,where,limit查询
2021-02-01 17:11:101、使用查询where、limitwhere:查询条件limit:限制查询结果显示的数量题目:查询students表中age<25的数据,并显示这些数据的id 、name、agemysql>select id,name,age from students where age <25 limit... -
MySQL分页查询limit优化的两种思路
2022-04-11 17:23:33我们知道,limit分页,当翻到比较靠后的页时,查询效率会越来越慢。如这则帖子所述: 浅谈PageHelper插件分页实现原理及大数据量下SQL查询效率问题解决 博主这也是一种不错的思路。其实针对分页这个问题,了解其为... -
mysql不支持在子查询中使用limit解决办法
2021-01-19 19:16:37今天在处理一个电影网站的数据,...这时mysql报错了:This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’字面意思就是不支持在子查询中使用limit关键字。经过搜索,找到了替代解... -
【mysql】limit实现分页
2022-02-11 20:52:551. 使用limit实现数据的分页显示 需求1:每页显示20条记录,此时显示第1页 SELECT employee_id,last_name FROM employees LIMIT 0,20; 需求2:每页显示20条记录,此时显示第2页 SELECT employee_id,last_name ... -
MySQL-- 限制数据查询(limit)
2021-10-13 21:36:05限制数据查询 – limit关键字 一般情况下查询出的数据是在符合条件的情况下,查询出的所有数据; 限制数据查询是在查询出的数据中限制查询结果的数量 (1)不指定初始位置(默认从第1条数据开始显示) 语法:select ... -
MySQL不支持子查询里有limit解决办法
2018-11-06 14:46:03select * from table where id in (select id from table limit 10); 但是,只要你再来一层就行。。如: select * from table where id in (select t.id from (select * from table limit 10)as t)... -
MYSQL limit用法
2021-08-17 17:43:371.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET ... -
MySQL使用LIMIT限制查询结果的数量
2021-01-19 19:48:46MySQL中,提供了LIMIT关键字,可以指定查询结果,从哪一条记录开始,以及一共查询多少条记录SELECT 字段名1,字段名2,……FROM 表名LIMIT [OFFSET,] 记录数参数说明LIMIT后面,可以跟两个参数第一个参数,OFFSET,... -
MySql:分页查询limit的正确用法
2019-10-28 22:44:55MySql:分页查询limit的正确用法 -- 原始分页查询 -- 4500 ms -- 慢的原因:1.* 2.limit太大 select * from post_history limit 2000000,10; -- 用明确字段代替* -- 1600ms select id,uid,media_id,... -
015 MySQL 中 limit 分页偏移量过大导致查询慢的优化
2022-03-25 15:33:29这时候你将会用到MySQL中的limit。 语法:SELECT * FROM table LIMIT [offset,] rows mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 //为了检索从某一个偏移量到记录集的结束所有 -
MySQL LIMIT 理解
2022-03-29 11:40:11MYSQL LIMIT -
MySQL-分页查询(Limit用法)
2020-06-27 15:45:19对于比较多的数据,如果在一个页面全部显示,查看起来会眼花缭乱。如果能进行分页显示,将更加快捷、清新的浏览! 这样,我们也容易查看前几条或者中间某几行数据。 语法(格式):SELECT*FROMtableLIMIT[offset,]... -
mysql子查询中不能使用LIMIT
2019-01-11 05:21:29mysql子查询中不能使用LIMIT /* 今天遇到个问题,如下: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' */ 直接po截图和代码 我们可以通过LIMIT来删除表中的数据 第一... -
MySQL性能优化_limit 的优化
2022-02-17 15:43:481) limit 存在的问题2) limit 为什么会存在这样的问题?3) 第一次优化——自增索引4) 第二次优化——条件查询转化为基于主键id的查询5) 第三次优化——条件查询转化为基于主键id的查询 + inner join 2. 如何优化 ... -
如何在MySQL中使用limit方式实现分页
2021-05-31 18:45:01一般情况下,客户端通过传递pageNo(页码)、pageSize(每页条数)两个参数去分页查询数据库中的数据,在数据量较小(元组百/千级)时使用MySQL自带的limit来解决这个问题: 二、建立主键或者唯一索引 在数据量较小... -
更优美的limit使用方法(limit 对mysql 数据查询的性能影响)
2020-01-19 17:39:20更优美的limit使用方法(limit 对mysql 数据查询的性能影响) 本文在zhangyachen的基础上重新排版 来源:zhangyachen https://github.com/zhangyachen/zhangyachen.github.io/issues/117 一,前言 首先说明... -
MySQL的Limit详解
2021-03-03 10:54:05Top子句 TOP 子句用于规定要返回的记录的数目。...但是并非所有的数据库系统都支持 TOP 子句,比如Oracle和MySQL,它们有等价的语法。 在Oracle数据库中语法为: SELECT column_name(s) FROM table_name WHERE ROWNUM -
MySQL LIMIT限制查询结果条数
2020-12-21 18:24:16SELECT * FROM student LIMIT 5 LIMIT n 限制查询n条记录 LIMIT... -
MYSQL百万级以上分页LIMIT速度太慢的优化方法
2021-11-16 17:11:21在MYSQL中LIMIT可以实现快速分页,但是当表中数据到了百万级别以上时就会变得非常慢,甚至造成服务器宕机。 //速度很快 SELECT * FROM table LIMIT 0,10; //速度很慢 SELECT * FROM table LIMIT 500000,10; LIMIT ... -
数据库 | SQL查询&LIMIT的用法
2021-01-18 20:30:48前言select top n 形式的语句可以获取查询的前几个记录,但是 mysql没有此语法,mysql用limit来实现相关功能。LIMIT子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个... -
MySQL Limit数据不足时导致查询变慢
2018-05-17 16:13:33问题 有如下一个查询: 查询SQL: select * from tb_record where ctime < 1524758400 AND AND ... 131946599 order by id asc limit 1000; 统计SQL: select count(*) from tb_record where ctime... -
mysql delete limit 简单用法
2021-03-14 11:58:14mysql delete limit 使用方法详解mysql delete limit优点:用于DELETE的MySQL唯一的LIMIT row_count选项用于告知服务器在控制命令被返回到客户端前被删除的行的最大值。本选项用于确保一个DELETE语句不会占用过多的... -
Mysql:分页查询、总页数,如何limit实现
2020-04-29 18:15:27分页查询,如何分页,总页数显示