我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql 分页语句Limit用法

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql 分页语句Limit用法

Mysql 分页语句Limit用法

Sql代码

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

Sql代码

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。  

    【引用,路人乙:Mysql中limit的用法详解】

2、Mysql的分页查询语句的性能分析

MySql分页sql语句,如果和MSSQL的TOP语法相比,那么MySQL的LIMIT语法要显得优雅了许多。使用它来分页是再自然不过的事情了。

2.1最基本的分页方式:

Sql代码

SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...  

在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引:

举例来说,如果实际SQL类似下面语句,那么在category_id, id两列上建立复合索引比较好:

Sql代码

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10 

2.2  子查询的分页方式:

随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

Sql代码 

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10 

一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。

此时,我们可以通过子查询的方式来提高分页效率,大致如下:

Sql代码

SELECT * FROM articles WHERE  id >=  
 (SELECT id FROM articles  WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10  

2.3 JOIN分页方式

Sql代码

SELECT * FROM `content` AS t1   
JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2   
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;   

经过我的测试,join分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。

explain SQL语句:

id select_type table type possible_keys key key_len ref rows Extra

1 PRIMARY system NULL NULL NULL NULL 1  

1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 Using where

2 DERIVED content index NULL PRIMARY 4 NULL 27085 Using index

为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。

实际可以利用类似策略模式的方式去处理分页,比如判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。

【引用原文,energy1010的空间:MySql分页sql语句】

3、Oracle分页查询语句

Oralce数据库 

从数据库表中第M条记录开始检索N条记录 

Sql代码

SELECT * FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2   
where t2.r >= M   

例如从表Sys_option(主键为sys_id)中从第10条记录开始检索20条记录,语句如下:

Sql代码

SELECT * FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2   
Where t2.R >= 10   

3、MSSQLSERVER分页查询语句

SQL Server主要利用 SELECT TOP语句分页,具体方案,请参考

分页方案一:(利用Not In和SELECT TOP分页) 

语句形式: 

Sql代码

SELECT TOP 10 *   
FROM TestTable   
WHERE (ID NOT IN   
(SELECT TOP 20 id   
FROM TestTable   
ORDER BY id))   
ORDER BY ID   

Sql代码 

SELECT TOP 页大小 *   
FROM TestTable   
WHERE (ID NOT IN   
(SELECT TOP 页大小*页数 id   
FROM 表   
ORDER BY id))   
ORDER BY ID   
SELECT TOP 页大小 *  

Sql代码

SELECT TOP 页大小 *  
FROM TestTable   
WHERE (ID >   
(SELECT MAX(id)   
FROM (SELECT TOP 页大小*页数 id   
FROM 表   
ORDER BY id) AS T))   
ORDER BY ID   

分页方案二:(利用ID大于多少和SELECT TOP分页) 

语句形式:

Sql代码

SELECT TOP 10 *   
FROM TestTable   
WHERE (ID >   
(SELECT MAX(id)   
FROM (SELECT TOP 20 id   
FROM TestTable   
ORDER BY id) AS T))   
ORDER BY ID   

分页方案三:(利用SQL的游标存储过程分页) 

Sql代码

create procedure XiaoZhengGe   
@sqlstr nvarchar(4000), --查询字符串   
@currentpage int, --第N页   
@pagesize int --每页行数   
as   
set nocount on   
declare @P1 int, --P1是游标的id   
@rowcount int   
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output   
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页   
set @currentpage=(@currentpage-1)*@pagesize+1   
exec sp_cursorfetch @P1,16,@currentpage,@pagesize   
exec sp_cursorclose @P1   
set nocount off   

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。 

建议优化的时候,加上主键和索引,查询效率会提高。 

 

通过SQL 查询分析器,显示比较:我的结论是: 

分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 

分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 

分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用 

 

在实际情况中,要具体分析。 

【引用:在SQL Server中通过SQL语句实现分页查询 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql 分页语句Limit用法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mysql 分页语句Limit用法

Sql代码 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常
Mysql 分页语句Limit用法
2014-09-24

mysql 使用技巧 分页limit

mysql 分页使用 limit关键字,limit x,y (x代表从哪条数据开始,y代表页面大小。mysql第一条数据在limit计算时索引为0)limit 10  前10条limit 0,10  从第1条开始的10条limit 10,10  从第 11 条
mysql 使用技巧 分页limit
2018-05-16

SQL语句limit的用法有哪些

在SQL语句中,LIMIT用于限制查询结果返回的记录数。在大多数数据库管理系统中,LIMIT的用法如下:1. 基本用法:LIMIT n,返回n条记录。```SELECT * FROM table_name LIMIT n;```2. 分页查
2023-09-05

mysql分页查询sql语句

使用 mysql 的 limit 和 offset 子句分页:1. 确定每页记录数。2. 计算偏移量:偏移量 = (当前页码 - 1) * 每页记录数。3. 在查询中,使用 limit 子句指定每页记录数,使用 offset 子句指定偏移量
mysql分页查询sql语句
2024-08-02

mysql分页语句怎么写

回答: mysql 中的分页查询语句使用 limit 子句,用于将庞大数据集分成页面。详细描述:基本分页查询语句:select * from table_name limit offset, number_of_rows;优化分页查询:创建
mysql分页语句怎么写
2024-05-21

mysql使用limit分页优化方案

一、测试实验 mysql分页直接用limit start, count分页语句:   select * from product limit start, count 当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始
2017-11-14

常用的mysql分页语句有哪些

常用的MySQL分页语句有以下几种:使用LIMIT关键字进行分页:SELECT * FROM table_name LIMIT offset, limit;这里的offset表示偏移量,limit表示每页显示的记录数。使用LIMIT关键
2023-10-22

MySQL优化LIMIT分页查询

在MySQL中,使用LIMIT关键字进行分页查询时,如果查询结果集很大,可能会导致性能问题。为了优化LIMIT分页查询,可以采用以下方法:使用索引:确保查询中涉及到的列都已经建立了索引,这样可以大大提高查询速度。同时,尽量避免在WHERE子
MySQL优化LIMIT分页查询
2024-10-20

mysql查询语句怎么分页

在 mysql 中使用 limit 和 offset 关键字进行分页,语法为:select * from table_name limit offset, limit。offset 指定跳过的行数,limit 指定检索的行数。示例:limi
mysql查询语句怎么分页
2024-05-30

mysql limit分页实现的方法是什么

MySQL中的LIMIT语句用于限制查询结果的数量。它的基本语法如下:SELECT column1, column2, ...FROM table_nameLIMIT offset, count;其中,offset表示查询结果的起始位
mysql limit分页实现的方法是什么
2024-04-09

MySQL limit语法是什么

MySQL的LIMIT语法是用于限制查询结果返回的记录数的。它可以用于选择从查询结果中的指定行数开始返回,也可以选择返回指定行数的记录。LIMIT语法的基本使用格式如下:SELECT column1, column2, ...FROM
MySQL limit语法是什么
2024-02-29

如何在mysql中优化LIMIT分页

这篇文章将为大家详细讲解有关如何在mysql中优化LIMIT分页,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、优化方法尽可能的使用覆盖索引扫描,而不是查询所有的列。然后根据需要做一次关联
2023-06-15

编程热搜

目录