查询优化:实现500万以上的数据查询分页在3秒以内

在 MySQL 单表存储 500 万数据的场景下,如何设计读取 阅读详情

 

描述信息

内容结果

count(*)比count(字段)

如果在开始时没有执行过count(最小字符的字段)来统计个数,count(*)不比count(字段)慢

Ge:

declare @d datetime

set @d=getdate()

SELECT count(*)

  FROM [TestPaging02].[dbo].[TGongwen]

select [用时(毫秒)]=datediff(ms,@d,getdate())

-----用时:21193---

次数

Count(*)

Count(gid)

1

743

720

2

686

743

3

753

686

字段提取要按照“需多少、提多少”的原则[H1]

declare @d datetime

set @d=getdate()

select top 10000 gid from tgongwen order by gid  desc

select [用时(毫秒)]=datediff(ms,@d,getdate())

3000

select top 10000 gid,fariqi,titlefrom tgongwen order by  gid desc

7436

select top 10000 gid,fariqi,title,readerfrom tgongwen  order by gid desc

17180

order by按聚集索引列排序效率最高

select top 10000 gid,fariqi,reader,title  from tgongwen(没有order by操作)

533

select top 10000 gid,fariqi,reader,title from tgongwen order by gidasc

(备注:create clustered index t_gid on TGongwen(gid)聚集索引gid列)

363

select top 10000 gid,fariqi,reader,title  from tgongwen order by  fariqi asc  不是索引fariqi列

60483

符合扫描参数(SARG)的优化格式:列名  操作符 <常数 或 变量>

或<常数  或 变量> 操作符列名eg: 5000<价格

select * from TGongWen where neibuyonghu='办公室' and gid > 10000

8473

select * from TGongWen where gid > 10000 and  neibuyonghu='办公室'

8496

select * from TGongWen where gid >  10000 and neibuyonghu  like '%公室' (不符合的形式)

14043

select * from TGongWen where gid >  10000 and neibuyonghu  like '办公%'

9336

   

表变量分页:

USE [TestPaging02]

GO

/****** Object:  StoredProcedure [dbo].[pagination1]    Script Date: 02/05/2012 15:57:06 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- Batch submitted through debugger:SQLQuery12.sql|15|0|C:\Users\HP\AppData\Local\Temp\~vs44BA.sql

--=============================================

-- Author:          <Author,,Name>

-- Create date: <Create Date,,>

-- Description: <Description,,>

-- =============================================

ALTER procedure [dbo].[pagination1]

(@pagesize int,  --页面大小,如每页存储20条记录

@pageindex int   --当前页码

)

as

set nocount on

begin

declare @indextable [H2] table(id int identity(1,1),nid int) --定义表变量

declare @PageLowerBound int  --定义此页的底码

declare @PageUpperBound int  --定义此页的顶码

set@PageLowerBound=(@pageindex-1)*@pagesize

set@PageUpperBound=@PageLowerBound+@pagesize

set rowcount[H3]  @PageUpperBound

insert into @indextable(nid) select gidfrom TGongwenorder by gid[H4] 

select O.gid from TGongwen O,@indextable twhere O.gid=t.nid

and t.id>@PageLowerBound andt.id<=@PageUpperBound order by t.id

end

set nocount off

-------------------------------------------------------计算时间

declare @d datetime

set @d=getdate()

exec pagination1 60,1/10/100/1000/10000/100000,

select [用时(毫秒)]=datediff(ms,@d,getdate())

 

Pagesize页面大小

当前页码

用时(毫秒)

60

100

63

1000

170

10000

2503

100000

15666

10

100000

2446

15

100000

3176

20

100000

3446

25

100000

7913/4740

 

MAX的方法

USE[TestPaging02]

GO

/******Object:  StoredProcedure[dbo].[pagination2]    Script Date:02/06/2012 08:24:18 ******/

SETANSI_NULLS ON

GO

SETQUOTED_IDENTIFIER ON

GO

ALTERPROCEDURE [dbo].[pagination2]

@pagesizeint,@pageindex int

AS

declare@strSQL   varchar(5000)

declare@pSize int

declare@pIndex int

BEGIN

SETNOCOUNT ON

set@pSize=@pagesize

set@pIndex=@pageindex

set@strSQL='select top '+convert(varchar,@pSize)+' gid from TGongwen '+'where gid>(select max (gid) from (select top (('+convert(varchar,@pIndex)+'-1)*'+convert(varchar,@pSize)+') gid from TGongwen  order by gid) as T) order by gid'

--selecttop @pSize gid from TGongwen

--set@strSQL="select top"+str(@pagesize)+" gid from TGongwen

--whereid>(select max (id) from (select top(("+str(@pageindex)+"-1)*"+str(@pagesize)+") id fromTGongwen  order by id) as T)    

--order by id"

--selecttop @pagesize gid from TGongwen

--whereid>(select max (id) from (select top ((@pageindex-1)*@pagesize) id fromtable1 order by id) as T)    

--orderby id

END

exec(@strSQL)

 -------------------------------------------------------计算时间

declare@d datetime

set@d=getdate()

execpagination2 25,1000000

select [用时(毫秒)]=datediff(ms,@d,getdate())

Pagesize页面大小

当前页码

用时(毫秒)

60

100

1000

10000

276

100000

2196/2133

10

100000

410

15

100000

566

20

100000

840

25

100000

883

 相关备注:


 [H1]其中字段的存储的内容的大小也严重影响查询速度

 [H2]生成一个临时表,存放主键gid

 [H3]可以限制输出,避免整表扫描

从500ms到15ms:百万级数据查询性能优化实战 在某服务日志数据量突破120万条后,核心接口响应时间从200ms激增至600ms。通过EXPLAIN分析发现,一个关键分页查询的`WHERE`条件涉及`year`、`month`、`cid`三个字段,在没有索引的情况下进行了全表扫描。本文将详解通过复合索引优化,最终将该查询性能提升50倍的完整过程。 阅读详情

相关推荐

用STM32CubeMX和HAL库,5分钟搞定TB6612驱动直流电机(附完整代码)

本文详细介绍了如何使用STM32CubeMX和HAL库快速配置TB6612驱动直流电机,包括硬件连接、CubeMX工程配置、电机驱动逻辑实现及进阶优化技巧。通过图形化工具和代码示例,即使是新手也能在5分钟内完成电机调速系统的搭建,大幅提升开发效率。

weixin_26854829的博客 266

线上500万数据查询时间在37秒,作者将问题解决了,我看到了更大的坑

线上500万数据查询时间在37秒,作者将问题解决了,我看到了更大的坑 文章目录总结一、问题背景二、看执行计划三、优化四、你以为这就结束了吗五、后续(还未解决)六、最终解决方案 总结 最近看到一篇文章,讲述了一个500万数据查询37秒的问题和解决方案。我先帮大家总结一下解决方案。 另外,看完这篇文章,我觉得虽然问题解决了。但是这个强制索引的解决方案并不是很好。 我就说一说在这个案例中用强制索引在公司团队开发中未来可能会遇到的问题: 系统有很多时候是根据系统信息来决定用哪个索引,一般系统是以最优化方式。现在强

谙忆-陈浩翔 5582

Hermes-Agent-完整指南

Hermes Agent 是由 **Nous Research** 开发的一款**自我改进型 AI Agent**,具有内置的学习闭环系统。它的核心理念是"一个与你共同成长的 Agent"。- 能够从经验中创建技能(Skill-Learning Automated),在使用过程中自我改进, 跨会话持久记忆, 深度用户建模

liu_zhiyi的博客 3037

记一次500万条数据查询的优化

1.公司业务系统数据平台今早发现有个接口响应很慢,经过逐一排查后,发现问题所在。该接口是做的一个单表查询,表的数据有500万条左右。 下面是表结构 下面是优化前的查询 SELECT count(IP) as uvCount,visitDate from ( select v.IP,DATE_FORMAT(v.CREATE_DATE,'%Y-%m') as visitDate fro...

qq_31674229的博客 3540

python——模拟砍价

类型:随机数。

m0_62488776的博客 1971

告别迷茫!手把手教你用Synopsys VC USB VIP搭建验证平台(附UVM分层序列实战解析)

本文详细介绍了如何使用Synopsys VC USB VIP搭建验证平台,并深入解析UVM分层序列的实战应用。通过Step-by-Step的操作指南和关键配置示例,帮助验证工程师高效集成USB VIP,掌握从环境搭建到测试用例开发的全套技能,特别适合处理复杂协议验证的挑战。

weixin_42520573的博客 554

百万条数据如何进行分页查询

今天面试被问到一张表 有500w条数据,如何进行分页查询,瞬间不知道怎么回答,平时工作中没接触到这么大的数据量。 所以回家自己去实验一下: 创建一张user表 CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(100) DEFAULT NULL COMMENT '用户名'...

城北荆无命的博客 3331

Excel地理探测器实战:5分钟搞定空间分异性分析(附完整数据集)

本文详细介绍了如何使用Excel地理探测器插件进行空间分异性分析。通过5分钟实战教程,手把手指导数据格式准备、软件操作及四大探测器(分异及因子、交互作用、风险区、生态探测器)的结果解读,帮助规划师、研究者快速验证地理因素对现象分布的影响,大幅降低GIS分析门槛。

peace的博客 608

从 MySQL 读取 500w 数据进行处理

大数据量操作的场景大致如下:数据迁移数据导出批量处理数据做法:常规查询: 一次性读取 100w 数据到 JVM 内存中,或者分页读取流式查询: 建立长连接,利用服务端游标,每次读取一条加载到 JVM 内存(多次获取,一次一行)游标查询: 和流式一样,通过 fetchSize 参数,控制一次读取多少条数据(多次获取,一次多行)默认的 RowDataStatic 读取全部数据到客户端内存中,也就是我们的 JVM;RowDataDynamic 每次 IO 调用读取一条数据;

yzx3105的博客 1279

cartographer如何使用2个反光柱子作为一个landmark

2个反光柱的摆放要求:靠着墙摆,因为我们只能从一侧看到2个反光柱,从两侧都看到至少需要3个反光柱来定位。 landmark检测原理:因为我们是从一侧看到2个反光柱,所以看到2个反光柱在一帧激光数据中会有顺序,有2种情形,如下图 这两种情形,我们发现 情形1: 这种情形2个反光柱子被检测到的激光角度小于180,我们认为大一些激光角度的是原点。 情形2: 这种情形2个反光柱子被检测到的激光角度大于180,我们认为小一些激光角度的是原点。 这样原点就固定下来,并是唯一的。2个反光柱构成的坐标系也就确定了。和激光坐

南北粉面馆 3827

Ubuntu 22.04+/WSL2 中解决 `error: externally-managed-environment` 并成功安装 PyTorch + vLLM 的完整指南

Ubuntu 22.04+/WSL2 因遵循 PEP 668 规范,系统 Python 被标记为“外部管理”,导致直接使用 pip install 安装包时报错 externally-managed-environment。解决方案是创建虚拟环境: 通过 python3 -m venv ~/vllm-env 创建隔离环境 激活环境后安装 PyTorch(CUDA 12.1)和 vLLM 避免使用 sudo pip 或 --break-system-packages,防止破坏系统依赖 关键点: 虚拟环

刘一说的IT专栏 296

MySQL单表超过500万条数据时的优化方法

将大表按规则(如时间、范围、哈希等)分成多个小表,提升查询性能并简化管理。:如Redis或Memcached缓存热点数据,减少数据库查询。:数据量极大时,将数据分布到多个数据库或表中,进一步提升性能。:将不常访问的历史数据迁移到其他表或数据库,减少主表数据量。:索引会增加写操作开销,定期检查并删除不必要的索引。:主库处理写操作,从库处理读操作,减轻主库压力。:将不常用或大字段拆分到其他表,减少单表大小。:按规则将数据分布到多个表中,减少单表数据量。,只选择需要的列,减少不必要的数据传输。

qq_37614659的博客 1086

【LLM数据篇】预训练数据集+指令生成sft数据集

在《Aligning Large Language Models with Human: A Survey》综述中对LLM数据分类为典型的人工标注数据、self-instruct数据集等 优秀的开源sft数据集:alpaca_data、belle、千言数据集、firefly、moss-003-sft-data多轮对话数据集等 文章目录 note 构造指令实例的3种方式 sft:Aligning Large Language Models with Human: A Survey Alpaca 1. self

发现问题,并解决问题,批判性思维 1万+

mysql查询300多万数据_mysql 300万数据查询500多秒如何优化

本帖最后由 dz215136304 于 2013-08-15 11:33:52 编辑 linux下 mysql 300万数据查询500多秒怎么优化啊,其中pid已经做索引,id是主键SELECT id,pid,keyWords,shortUrl FROM keywords WHERE pid=0 ORDER BY id DESC LIMIT 50explain 如下:my...

weixin_35410816的博客 1339

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

3秒响应!RuoYi系统数据查询优化实战指南

你是否还在为权限管理系统中的数据查询缓慢而烦恼?用户信息加载卡顿、部门列表刷新延迟、角色权限查询超时——这些问题不仅影响用户体验,更可能导致业务流程受阻。本文将从SQL优化、缓存策略、索引设计三个维度,详解如何基于RuoYi框架实现查询性能的跨越式提升,让你的管理系统轻松实现毫秒级响应。 ## 一、SQL注入防护与查询安全优化 在讨论性能优化前,数据安全是不可逾越的红线。RuoYi框架在`Sq...

gitblog_00274的博客 846

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SQL中数据查询分页操作集中地

(转)查询 31到40条记录 的各种玩法(分页可以支持海量数据5百万,时间大约在1--5秒)--推荐 URL:http://blog.youkuaiyun.com/arvinstudy/article/details/8509766 SQL数据库中查找一条记录是否存在 count(推荐) URL:http://blog.youkuaiyun.com/arvinstudy/article/details/8489

码农 1038

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Grafana面板性能优化实战:500+面板的Dashboard加载速度从8秒优化到1.5秒的调优记录

本次Grafana性能优化项目是一次系统性、全方位的技术实践,涵盖了前端渲染、数据查询、后端架构和基础设施等多个层面。通过将大型Dashboard的加载时间从8秒降至1.5秒,我们不仅提升了运维团队的工作效率,更重要的是建立了一套可持续的性能优化方法论。技术架构层面懒加载是处理大规模数据展示的通用解决方案:无论是Grafana面板、日志查询还是告警列表,只要涉及大量DOM节点或数据记录,都应该采用懒加载策略查询合并与缓存是提升数据密集型应用性能的关键。

qwe0iop0的博客 4157

如果面试官问你如何优化mysql分页查询,请把这篇文章甩给他!

mysql limit优化,分页优化

流星007 3128

系统设计 --- MongoDB亿级数据查询优化策略

本文探讨了MongoDB处理亿级审计日志数据的解决方案。面对6个月7千万-1亿条数据量、全文检索和时间排序的需求,由于无法使用ELK,采用按周分表策略(每周数据300-400万条)。关键设计包括:时间映射表名、两阶段查询(先统计各collection匹配数再精准获取)、查询结果缓存优化。该方案通过并发查询和智能分页实现了1分钟内响应,满足前端分页、多条件查询和排序需求,将数据库交互控制在2次(统计+查询)。

HelloWorld 915

# 千亿级数据查询优化实战:从 30 分钟到 3 秒的极致优化

选择合适模型(明细/聚合/更新)合理分区(按月/按周)科学分桶(数据量/10GB)冷热数据分层指标优化前优化后提升简单查询 P9930 秒2 秒15 倍复杂查询 P995 分钟30 秒10 倍聚合查询 P9930 分钟3 秒600 倍并发能力200 QPS1200 QPS6 倍超时率25%0.5%存储成本¥96 万/月¥15 万/月-84%

Hero_HNB的博客 468

MySQL百万级分页查询优化

百万级数据做分页如何优化?     数据量很大,分页查询很慢,有什么优化方案?     当需要从数据库中查询的表有上百万条记录的时候,一次性查去所有结果会变的很慢,特别是随着数据量的增加更加明显,这时候如果需要分页的话会变的很慢很慢。 准备工作 表明 test 主键id自增,总共有11个字段,不包含text等大型数据...

那一抹回忆 608

mysql优化sql查询语句_从500万条数据中查询,求优化一条SQL语句

表结构如下,里面有500W数据。我没有权限修改这个表,所以请大家给我优化下SQL查询CREATE TABLE IF NOT EXISTS `jdp_tb_trade` (`tid` bigint(20) NOT NULL,`status` varchar(64) DEFAULT NULL,`type` varchar(64) DEFAULT NULL,`seller_nick` varchar(3...

weixin_42355411的博客 712

MySQL百万级数据量分页查询方法及其优化

方法一:直接使用数据库提供的SQL语句 语句样式:MySQL中可用如下方法: select * from table_name limit m, n; 适用场景:适用于数据量较少的情况(元组百/千级) 原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). limit限制的是从结果集的 m 位置处取出 n 条输出,其余抛弃. ...

吴小迪的博客 3万+

Mybatis-plus3.3及之前版本 支撑当前分页查询是否允许突破单页最大500条数据的限制

Mybatis-plus 支撑当前分页查询是否允许突破单页最大500条数据的限制 mybatis-plus处于性能和安全的考虑,默认分页查询的单页最大数量为500(具体代码在PaginationInterceptor的intercept方法中), 但是有时候我们需要突破这个500的限制,关于突破500这个限制,现有网上已经有很多大佬给出了方案,根据上面的代码来看也很简单,设置limit的值小于等于0就可了 。 @Bean @Order(-2) public PaginationInter

donotshow的博客 1721

mysql500万数据查询速度_是什么影响了数据库查询速度

一、什么影响了数据库查询速度1.1 影响数据库查询速度的四个因素1.2 风险分析QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。客户机在发送请求时开始计时,收到服务器响应后结束计...

weixin_39607620的博客 1202

REL分页实现完全指南:高效处理大数据集查询

在现代Web应用中,处理大数据集查询是一个常见需求,而**REL分页**功能正是解决这一问题的利器。REL作为Golang生态中的现代ORM框架,提供了简洁优雅的分页API,让开发者能够轻松实现高效的数据分页查询。本文将深入探讨REL分页的实现原理、使用方法和最佳实践,帮助您掌握这一强大的数据查询工具。 ## 📊 为什么需要分页? 当处理大量数据时,一次性加载所有记录会导致: - 内存消耗过

gitblog_00057的博客 708
上一篇: 经典SQL语句大全
下一篇: 两种数据库,四种分页算法的效率比较
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值