当前位置: 首页 > article >正文

MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题

1. limit 100000,10 和 limit 10区别

  1. LIMIT 100000, 10

    • 这个语句的意思是,从查询结果中跳过前100000条记录,然后返回接下来的10条记录。
    • 这通常用于分页查询中,当你需要跳过大量的记录以获取后续的记录时。例如,如果你有一个包含大量数据的查询结果,你可能想要查看第100001页的数据,每页显示10条记录,这时就会使用这种形式的LIMIT子句。
  2. LIMIT 10

    • 这个语句的意思是,返回查询结果的前10条记录。
    • 这是一个非常常见的用法,用于限制查询结果的数量,特别是在你只需要一小部分数据时。例如,你可能只想查看表中的前10条记录,或者在进行测试时限制返回的数据量。

2. 超大分页优化思路

覆盖索引加子查询

优化思路:分页查询时通过创建覆盖索引提高性能,再通过覆盖索引加子查询的形式进行优化

举例:

假设有一个 users 表,结构如下:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100),
    created_at TIMESTAMP
);

我们想要获取从第 1000001 条到第 1000010 条记录的用户名字(即分页)

优化前的 SQL 查询

SELECT name FROM users
ORDER BY id
LIMIT 1000000, 10;

全表扫描:这个查询没有使用子查询,因此 MySQL 必须从第一条记录开始,扫描直到跳过前 1000000 条记录,然后返回接下来的 10 条记录。

性能问题:当表中的记录数非常大时,这种方式会导致显著的性能下降,因为数据库需要遍历大量的记录,导致高的 IO 开销。

优化后的 SQL 查询

-- 创建覆盖索引,包含需要查询的字段(id和name)

CREATE INDEX idx_id_name ON users(id, name);

然后使用子查询优化

SELECT name FROM users
WHERE id IN (
    SELECT id FROM (
        SELECT id FROM users ORDER BY id LIMIT 1000000, 10
    ) AS temp
);

内部子查询SELECT id FROM users ORDER BY id LIMIT 1000000, 10

  • 这个子查询的作用是从 users 表中获取 id10000011000010 的记录。
  • 这里会使用id索引快速定位到对应的位置及1000001,而不会从头开始遍历所有记录

外部查询SELECT name FROM users WHERE id IN (...)

  • 外部查询使用内层子查询的结果,获取这些 id 对应的用户 name

覆盖索引的使用

  • 覆盖索引:在 CREATE INDEX idx_id_name ON users(id, name); 中创建的索引包含了查询需要的所有列 idname
  • 由于外部查询只选择了 name 列,且查询条件中使用了 idMySQL 可以直接从索引中获取 idname,避免了对 users 表的回表操作。

3.面试题

3.1 什么是覆盖索引?

3.2 MySQL超大分页怎么处理?


http://www.kler.cn/a/377567.html

相关文章:

  • 【dvwa靶场:XSS系列】XSS (DOM) 低-中-高级别,通关啦
  • Go:接口和反射
  • 水仙花求和
  • 解决方案 | 部署更快,自动化程度高!TOSUN同星线控底盘解决方案
  • Hive自定义函数—剔除周日周六(小时级别)
  • 响应式网页设计案例
  • Word2Vec——嵌入单词并显示图形
  • 【Python ASR 】模型对比 whisper 和 funasr
  • 从零开始的 vue项目部署到服务器详细步骤(vue项目build打包+nginx部署+配置ssl证书)
  • Maven(16)如何使用Maven创建一个新的项目?
  • [MySQL]DDL语句
  • 大模型在自动化渗透测试中的应用
  • MySQL 的 BETWEEN AND
  • 系统架构设计师-未来信息综合技术(2)
  • 【动手学电机驱动】 STM32-FOC(2)IHM03 电机控制套件介绍
  • (四)PostgreSQL数据库操作示例
  • SQL优化经验大全(表设计优化,索引优化,索引创建规则、索引失效场景,sql语句优化,主从复制,分库分表)面试题
  • list(c++)
  • 基于milvus的多模态检索
  • AWS RDS Oracle hit ORA-39405
  • 第三十一章 单页与多页应用程序概念
  • 单智能体carla强化学习实战工程介绍
  • 使用Django REST framework构建RESTful API
  • 【React 轮子】文本溢出后显示展开/收起按钮
  • java jsoup解析豆瓣电影数据html实战教程
  • Linux云计算 |【第五阶段】CLOUD-DAY5