高斯DWS数据库分页查询优化思路

除了高斯其它关系型数据可也一样可以使用

官方链接:EXPLAIN_数据仓库服务 GaussDB(DWS)_8.2.0_DML语法_华为云

参考链接:MySQL大数据量分页查询方法及其优化_mysql大数据量分页查询优化-CSDN博客

数据量过大,分页查询优化

背景:数据仓库采用高斯DWS,API平台采用DBAPI,平台限制了一个请求最大3S,因此超过3S的请求将会被取消掉,请求3S并不是SQL执行3S,经过验证,SQL执行九百多毫秒请求就会被杀掉,当前表数据大概四百多万。

直接使用limit加offset

sql 复制代码
explain ANALYSE VERBOSE  select * from  表名 limit 10 offset 402243;
-- 耗时:Total runtime: 8578.479 ms

上面的SQL是最初的SQL,有很多问题,首先列没有裁剪,其次没有建立索引,也没有使用主键,因此下面的优化步骤首先为这张表建一个主键索引,再进行列裁剪

列裁剪加索引

sql 复制代码
explain ANALYSE VERBOSE  select a, b,c, d, e 
from  表名 limit 10 offset 402243
-- 耗时:Total runtime: 1590.931 ms

通过列裁剪加主键索引,耗时已经从8秒多减少到了1.5秒,查询性能提升了很多,但是仍然达不到要求,继续分析,由于已经建立了索引,那么是否可以用自连接,第一步直接查索引,第二步取命中部分数据的所需字段

索引子查询

sql 复制代码
explain ANALYSE VERBOSE  select a,b,c,d,e 
from 表名 
where a in
	(select a from  表名 limit 10 offset 402243)
-- 耗时:Total runtime: 146.485 ms

现在速度已经优化到了1.5毫秒左右,能满足我们的需求,当然用join的写法也是可以的:

sql 复制代码
explain ANALYSE VERBOSE  select a,b,c,d,e 
from 表名 t1 JOIN
(select a from  表名 limit 10 offset 402243) t2
on t1.a = t2.a
-- 耗时:Total runtime: 171.609 ms

使用join和子查询相差不大,都能满足我们的需求,当然我们的平台是基于华为高斯DWS数据库设计的,在过程中也考虑了华为的优化,可参考:优化查询性能概述_数据仓库服务 GaussDB(DWS)_性能调优_华为云

高斯是分布式数据库,将会对数据进行分布式存储,会增加网络之间传输的性能损耗,因此尝试了下每个节点都保存一份数据,是否能增加查询速度,这个做法的弊端在于,数据会在每个查询节点都会存储一份,造成存储资源的浪费,在实际测试中,查询性能并不能得到提升。

相关推荐
Lyyaoo.1 分钟前
【MySQL】索引
数据库·mysql
i220818 Faiz Ul2 分钟前
民谣网站|基于Springboot的民谣网站管理系统(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·民谣网站
摇滚侠13 分钟前
JDBC 基础到高级一套通关!基础篇 00-15
java·开发语言·数据库
Amnesia0_014 分钟前
MYSQL操作
数据库·mysql
兆。17 分钟前
LangChain实验跟踪集成指南:面向ML研究员
数据库·langchain
zhojiew18 分钟前
DuckLake湖仓数据格式常用操作实践以及和Iceberg的对比
数据库
万粉变现经纪人20 分钟前
2026最新CSDN博客质量分v6.0深度解读:从评分机制到80+实战提分指南
数据库·人工智能·深度学习·csdn·csdn博客·csdn博客质量分6.0·博客质量分
曹牧39 分钟前
Oracle:嵌套子查询
数据库·oracle
王莎莎-MinerU39 分钟前
Agent 时代,科学数据 API 需要重新设计
大数据·前端·数据库·人工智能·个人开发
jghhh0139 分钟前
MATLAB蒙特卡罗方法求解伊辛模型
数据库·人工智能·matlab