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

MySQL 用 limit 影响性能的优化方案

一.使用索引覆盖扫描

如果我们只需要查询部分字段,而不是所有字段,我们可以尝试使用索引覆盖扫描,也就是让查询所需的所有字段都在索引中,这样就不需要再访问数据页,减少了随机 I/O 操作。

例如,如果我们只需要查询 id 和 val 字段,我们可以执行以下语句:

select id,val from test where val=4 limit 300000,5;

这样,Mysql 只需要扫描索引页,而不需要访问数据页,提高了查询效率。

二.使用子查询。

如果我们不能使用索引覆盖扫描,或者查询字段较多,我们可以尝试使用子查询,也就是先用一个子查询找出我们需要的记录的 id 值,然后再用一个主查询根据 id 值获取其他字段。

例如,我们可以执行以下语句:

select * from test where id in (select id from test where val=4 limit 300000,5);

这样,Mysql 先执行子查询,在 val 索引上进行范围扫描,并返回 5 个 id 值。然后,Mysql 再执行主查询,在 id 索引上进行点查找,并返回所有字段。这样,Mysql 只需要扫描 5 个数据页,而不是 300005 个数据页,提高了查询效率。

三.使用分区表。

如果我们的表非常大,或者数据分布不均匀,我们可以尝试使用分区表,也就是将一张大表分成多个小表,并按照某个字段或者范围进行划分。这样,Mysql 可以根据条件只访问部分分区表,而不是整张表,减少了扫描和访问的数据量。

例如,如果我们按照 val 字段将 test 表分成 10 个分区表(test_1 到 test_10),每个分区表只存储 val 等于某个值的记录,我们可以执行以下语句:

 

这样,Mysql 只需要访问 test_4 这个分区表,而不需要访问其他分区表,提高了查询效率。

相关文章:

  • 深入学习OpenCV:第一章简介
  • (二十二)安卓开发中的数据存储之SQLite简单使用
  • 《轨道力学导论》——第一讲:轨道力学概述
  • 案例驱动的 IT 团队管理:创新与突破之路: 第四章 危机应对:从风险预见到创新破局-4.1.2债务评估模型与优先级排序
  • 阻塞与非阻塞等待非阻塞轮询
  • 代码,Java Maven项目打包遇到的环境问题
  • 针对OPPO A5(PBAM00)在锁屏界面屏幕无法滑动的问题.
  • STM32 HAL库 HC-05蓝牙通信实现
  • 《嵌入式系统原理》一些题目
  • Mysql5.7配置文件
  • StickyNotes,简单便签超实用
  • 变点分组法是一种时序数据处理与分段分析的方法
  • 聊聊Spring AI的Prompt
  • 20250414| AI:RAG多路召回和融合重排序技术
  • Android Studio 在 Windows 上的完整安装与使用指南
  • TreeMap和HashMap的区别
  • CST1020.基于Spring Boot+Vue汽车租赁管理系统
  • Neo4j GDS-10-neo4j GDS 库中相似度算法介绍
  • 自用:在使用SpringBoot做学生信息管理系统时遇到的问题
  • Npfs!NpFsdCreate函数分析之从NpCreateClientEnd函数分析到Npfs!NpSetConnectedPipeState
  • 三亚通报救护车省外拉警报器开道旅游:违规违法,责令公司停业整顿
  • 寒武纪陈天石:公司的产品力获得了行业客户广泛认可,芯片市场有望迎来新增量需求
  • 中国社科院:网文市场超430亿元,作者破3000万人
  • 李在明正式登记参选下届韩国总统
  • AI药企英矽智能第三次递表港交所:去年亏损超1700万美元,收入多数来自对外授权
  • 101条关于减重的知识,其中一定有你不知道的