MySQL 中的 LIMIT 语句及基本用法

2025-04-16 16:50

本文主要是介绍MySQL 中的 LIMIT 语句及基本用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下...

MySQL 中的 LIMIT 语句

LIMIT 语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率。

1. LIMIT 语法

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件
ORDER BY 排序字段
LIMIT 记录数 OFFSET 偏移量;

或:

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件
ORDER BY 排序字段
LIMIT 偏移量, 记录数;

LIMIT 偏移量, 记录数LIMIT 记录数 OFFSET 偏移量 作用相同。

2. LIMIT 基本用法

(1) 获取前 N 行数据

SELECT * FROM users LIMIT 5;

返回表 users 的前 5 行数据

(2) LIMIT 结合 ORDER BY

如果不排序,返回的数据可能不稳定(顺序不确定)。

SELECT * FROM users ORDER BY age DESC LIMIT 5;

先按 age 降序排序,再取前 5 行数据。

(3) LIMIT 进行分页查询

如果要获取第 11 到 20 条记录

SELECT * FROM users ORDER BY id ASC LIMIT 10 OFFSET 10;

或:

SELECT * FROM users ORDER BY id ASC LIMIT 10, 10;
http://www.chinasem.cn

等效于 LIMIT 10 OFFSET 10,其中:

  • 10偏移量(OFFSET),表示跳过前 10 条数据。
  • 10返回的行数(LIMIT)

分页查询公式

LIMIT 每页条数 OFFSET (当前页 - 1) * 每页条数;

例如:

  • 第 1 页(前 10 条):LIMIT 10 OFFSET 0
  • 第 2 页(第 11-20 条):LIMIT 10 OFFSET 10
  • 第 3 页(第 21-30 条):LIMIT 10 OFFSET 20

3. LIMIT 结合 COUNT()

(1) 统计总记录数

分页时,通常要先获取总记录数:

SELECT COUNT(*) FROM users;

COUNT(\*) 更快,不会忽略 NULL

4. LIMIT 结合 RAND()(随机取数据)

如果想要随机返回 3 条记录

SELECT * FROM users ORDER BY RAND() LIMIT 3;

⚠ 注意

ORDER BY RAND() 性能较低,会对所有数据进行排序再取值。

更高效的随机查询(适用于 id 递增的数据表):

SELECT * FROM users WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM users))) LIMIT 3;

5. LIMIT 语句的性能优化

(1) LIMIT OFFSET 可能导致性能下降

OFFSET 很大时:

SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 100000;

MySQL 仍然会扫描 100000 行,然后丢弃前 100000 条数据,只返回 10 条,影响性能

优化方法:用索引加条件替代 OFFSET

SELECT * FROM users WHERE id > 100000 ORDER BY id LIMIT 10;

适用于 id 是自增主键的情况,查询速度更快。

(2) LIMIT 结合 JOIN 可能引发性能问题

SELECT * FROM users JOIN orders ON users.id = orders.user_id ORDER BY users.id LIMIT 100000, 10;

如果 users.id 没有索引,查询会很慢

优化方法

SELECT users.* FROM users WHERE users.id > (SELECT id FROM users ORDER BY id LIMIT 10000android0, 1) ORDER BY users.id LIMIT 10;

找到偏移的起点,再 LIMIT 取值,减少扫描行数

6. LIMIT 结合 GROUP BY

如果要获取每个城市的前 3 名用户

SELECT * FROM (    SELECT *, ROW_NUMBER() OVER (PARTITION BY city ORDER BY age DESC) AS rank    FROM users) AS temp WHERE rank <= 3;

ROW_NUMBER() 需要 MySQL 8.0+ 才支持。

7. LIMIT 结合 DISTINCT

如果要获取唯一数据的前 5 条

SELECT DISTINCT city FROMwww.chinasem.cn users LIMIT 5;

LIMITDISTINCT 之后生效,只返回 5 个唯一的 city

8. LIMIT 语句总结

用法语法示例说明
获取前 N 行LIMIT 5取前 5 条数据
分页查询LIMIT 10 OFFSET 10取第 11-20 条数据
随机取 N 条ORDER BY RAND() LIMIT 3随机返回 3 条数据
统计总数SELECT COUNT(*) FROM users;获取总记录数
优化大偏移WHERE id > (SELECT id FROM users LIMIT 100000, 1) LIMIT 10;避免 OFFSET 性能问题

重点总结

  • LIMIT 限制查询返回的行数,用于分页或取部分数据。
  • LIMIT 偏移量, 行数 等价于 LIMIT 行数 OFFSET 偏移量
  • ORDER BY + LIMIT 确保数据顺序稳定。ORDER BY RAND() 效率低,大数据表建议用更优化的随机查询。
  • OFFSET 查询效率低,建议用索引优化查询。

这样,你的 LIMIT 查询就会更快、更高效!

到此这篇关于MySQL 中的 LIMIT 语句及基本用法的文章就介绍到这了,更多相关MySQL LIMIT 语句内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于MySQL 中的 LIMIT 语句及基本用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154243

相关文章

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

python3 gunicorn配置文件的用法解读

《python3gunicorn配置文件的用法解读》:本文主要介绍python3gunicorn配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python3 gunicorn配置文件配置文件服务启动、重启、关闭启动重启关闭总结python3 gun

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分