【编程底层原理】亿级数据表查询最后10条记录limit 99999990,10性能为啥特慢,而且数据库都被查宕机了

news/2024/12/22 9:08:07/

一、影响因素

查询一个包含1亿条数据的表,并使用 LIMIT 99999990, 10 来获取最后的10条记录,性能慢的原因主要是因为 LIMIT 子句的偏移量(offset)非常大。以下是一些导致性能问题的关键因素

  1. 大量跳过 - LIMIT 子句的前一个数字(99999990)是告诉数据库跳过前99999990条记录,这需要数据库扫描并跳过这些记录才能返回最后的10条。
  2. 全表扫描 - 如果没有有效的索引来支持这种类型的查询,数据库可能需要执行全表扫描,这在数据量大的情况下非常耗时。
  3. 排序开销 - 如果查询中包含 ORDER BY 子句,并且排序的列没有索引,数据库需要对所有记录进行排序,这会增加大量的CPU和内存开销。
  4. 临时表空间 - 排序操作可能需要使用临时表空间,对于大量数据,这可能会消耗大量的磁盘I/O资源。
  5. 锁定和闩锁 - 大量的跳过和扫描可能导致数据库锁定和闩锁,影响并发性能,甚至导致其他查询和更新操作被阻塞。
  6. 资源耗尽 - 如果数据库服务器的硬件资源(如CPU、内存、I/O)有限,这种类型的查询可能会消耗大量资源,导致服务器响应缓慢或宕机。

二、优化措施

为了避免这些问题,可以采取以下优化措施- 使用索引 - 确保有一个索引可以快速定位到接近表末尾的位置。例如,如果有一个时间戳或自增ID列,可以在这个列上创建索引。

  • 优化查询 - 如果可能,重写查询逻辑,避免使用大偏移量。如果需要获取最后10条记录,考虑使用其他逻辑来确定这10条记录的位置。
  • 分批处理 - 如果需要处理大量数据,考虑使用分批查询和处理的方法,每次处理一小部分数据。
  • 资源优化 - 根据服务器的硬件配置优化数据库的配置,如增加内存分配,优化I/O性能等。
  • 分布式查询 - 对于非常大的表,考虑使用分区表或分布式数据库系统,以提高查询性能。
  • 监控和调优 - 使用数据库的性能监控工具来识别瓶颈,并根据需要进行调优。
  • 避免大偏移量 - 如果业务逻辑允许,避免使用带有大偏移量的 LIMIT 子句,因为这通常是一个性能杀手。
    在某些情况下,如果表的结构和数据分布允许,可以通过其他方法来获取最后几条记录,例如,如果有一个自增ID,可以先获取最大ID,然后查询紧随其后的记录。

http://www.ppmy.cn/news/1528256.html

相关文章

使用Mockito进行单元测试

1、单元测试介绍 Mockito和Junit是用于单元测试的常用框架。单元测试即:从最小的可测试单元(如函数、方法或类)开始,确保每个单元都能按预期工作。单元测试是白盒测试的核心部分,它有助于发现单元内部的错误。 单元测试…

半导体器件制造5G智能工厂数字孪生物联平台,推进制造业数字化转型

半导体器件制造行业作为高科技领域的核心驱动力,正积极探索和实践以5G智能工厂数字孪生平台为核心的新型制造模式。这一创新不仅极大地提升了生产效率与质量,更为制造业的未来发展绘制了一幅智能化、网络化的宏伟蓝图。 在半导体器件制造5G智能工厂中&a…

Maven笔记(一):基础使用【记录】

Maven笔记(一)-基础使用 Maven是专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构 Maven提供了一套标准化的项目结构,所有IDE(eclipse、myeclipse、IntelliJ IDEA 等 项目开发工具) 使…

mat (Eclipse Memory Analyzer Tool)使用以及详解

前言 在Java开发中,内存问题往往不易被发现,但它们可能导致应用性能下降甚至崩溃。Eclipse Memory Analyzer Tool(MAT)是一个强大的开源工具,专门用于分析Java堆转储(heap dumps)文件&#xff…

小程序服务零工市场

零工市场小程序有着信息发布、岗位匹配、线上接单、零工人员保障险参保、技能培训、费用结算、完工确认、服务评价、纠纷调解等功能,为求职者和雇主搭建一座高效、便捷、精准的对接桥梁。 用工单位通过小程序的“雇主找人”,发布招聘信息,找到…

拓扑排序专题篇

目录 前言 课程表 课程表II 课程表IV 火星词典 前言 拓扑排序是指对一个有向无环图的节点进行排序之后得到的序列,如果存在一条从节点A指向节点B的边,那么在拓扑排序的序列中节点A出现在节点B的前面。一个有向无环图可以有一个或多个拓扑排序序列&a…

JWT跨域认证

Session认证 用户认证的流程: 用户向服务器发送用户名和密码。 服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等。 服务器向用户返回一个session_id,写入用户的Cookie。 用户随后的每一次请求,…

导电滑环在工业设备中的作用分析

导电滑环作为现代工业设备中的关键组件,广泛应用于各种机械和电子系统中。本文将探讨导电滑环的工作原理及其在不同应用领域中的重要作用。 导电滑环的工作原理主要基于电气传导与机械旋转的结合。导电滑环通常由环形导体和刷子组成,刷子紧贴在滑环表面…