读书笔记:分区不一定能让查询更快——关键要看使用场景

news/2025/11/5 20:54:38/文章来源:https://www.cnblogs.com/www-htz-pw/p/19194583

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

分区不一定能让查询更快——关键要看使用场景

很多人对分区有个误解:只要把大表分区,性能就能提升。但实际情况要复杂得多。分区可能带来三种结果:

  1. ✅ 查询变快
  2. ➡️ 查询性能不变
  3. ❌ 查询变慢,资源消耗倍增

数据仓库:分区的理想场景

在数据仓库中,分区确实能大幅提升性能。举个例子:

  • 你有张10亿行的表,包含10年数据
  • 查询只需要其中1年的数据
  • 如果按月分区,查询只需扫描1/10的数据
  • 其他90%的数据会被自动“跳过”

这就好比在图书馆里:如果你知道想要的书在“2023年”区域,就直接去那个区域找,不用翻遍整个图书馆。

OLTP系统:分区要格外小心

在OLTP系统(比如银行交易系统)中,情况完全不同:

  • 通常不会一次性查询海量数据
  • 分区的主要价值在于提高可用性和便于管理
  • 目标应该是:不影响现有查询性能

一个真实的分区陷阱

某团队有个1亿行的表,决定按主键哈希分区(分成16个分区),并在(所有者,对象类型,对象名)上创建了本地索引。

结果发现问题:

-- 这个查询性能很好(用了主键)
SELECT * FROM T WHERE PRIMARY_KEY = :X-- 但这些查询变慢了!
SELECT * FROM T WHERE OWNER = 'SCOTT'
SELECT * FROM T WHERE OWNER = 'SCOTT' AND OBJECT_TYPE = 'TABLE'

为什么变慢了?

  • 本地索引按主键分区,但查询条件用的是OWNER
  • 系统要扫描所有16个索引分区才能找到数据
  • 原本只需要7次逻辑读取,现在需要36次

解决方案:改用全局分区索引

-- 删除本地索引,创建全局哈希分区索引
CREATE INDEX t_idx ON t(owner,object_type,object_name)
GLOBAL PARTITION BY HASH(owner) PARTITIONS 16;

这样查询时,系统能直接定位到对应的索引分区,性能恢复正常。

重要提醒:哈希分区索引的局限性

  • 只适合等值查询(= 或 IN)
  • 不支持范围查询(>、<、BETWEEN)
  • 如果要查“WHERE OWNER > 'SCOTT'”,还是会扫描所有分区

关于排序的误解

很多人以为用了索引,数据就自动排序了——这是错误的!无论是否使用索引,只有ORDER BY能保证排序结果

分区在OLTP中的真正价值:高并发

虽然分区对查询性能提升有限,但在高并发场景下很有价值:

不分区的痛点 分区后的改善
所有插入都争用同一个表 分散到16个分区,争用减少
主键索引的“右侧热点”问题 16个独立的索引结构,热点分散
索引竞争激烈 负载分摊到多个索引

但要注意成本

分区需要额外的CPU开销来计算数据应该放在哪个分区。如果系统已经CPU紧张,分区可能让情况更糟。

总结

  • 数据仓库:分区能显著提升性能
  • OLTP系统:分区主要提高可用性和可管理性
  • 选择分区方案时,一定要分析实际的查询模式
  • 在高并发写入场景,分区能有效减少资源争用
  • 实施前务必测试,确保不会适得其反

记住:分区不是“一键提速”的魔法,用对了是利器,用错了是负担!

------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/957134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

quick save

s and l群星联结,调不动了; // code by 樓影沫瞬_Hz17 #include <iostream> #include <map> #include <vector> #include <algorithm>struct Chara; struct Talent; struct Attack;int turn…

cg0EoeZwd/bdvtAmh0q4PjjA4Pc=

这是郑州西亚斯学院智能体创新大赛的示例文件,如果你看到这个信息,说明这个文件的内容已经正常发送。

openwrt 使用 移动WIFI USB RNDIS 上网

最初为了简单,是使用 无线中继方式上网,但是有时不稳定,而移动WIFI 也支持 RNDIS 方式。 打开编译配置以下功能: 编译完成后,升级后插入USB 线测试[ 110.492259] usb 1-1: new high-speed USB device number 2 u…

【Agent】 ACE(Agentic Context Engineering)源码阅读笔记 ---(2)--- 训练

[Agent] ACE(Agentic Context Engineering)源码阅读笔记---(2)训练 目录[Agent] ACE(Agentic Context Engineering)源码阅读笔记---(2)训练0x00 概要0x01 AdapterBase1.1 定义1.2 核心流程1.3 主要功能1.4 Off…

Codeforces Global Round 28 VP 记录

Codeforces Global Round 28 VP 记录 Dashboard - Codeforces Global Round 28 - Codeforces 之前做过 G,赛时从 A 做到了 G,赛后做了 H,看题解会了 I1,I2 还不会。 CF2048A Kevin and Combination Lock 判断是否是…

20251104NOIP模拟

NOIP模拟总结 这场并没有打好 A 预计:100,实际:100思路历程:我先考虑去把所有点按要求的道路种类分开,判断是否联通,是否是一条链,其中每个点要求的个数是否满足条件,可以发现这个做法会超时,因为在不同颜色的…

软件工程团队项目第一次作业

软件工程团队项目第一次作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13573…

开源一个月Star破7000+!RustFS凭什么火出圈?

开源一个月Star破7000+!RustFS凭什么火出圈?2025年,当存储领域似乎已被MinIO、Ceph等老牌玩家瓜分完毕时,一个基于Rust语言的新星RustFS却在开源一个月内狂揽​7000+ Star​,三个月突破​10.3k,成为GitHub上星标…

第五届日月盾杯线下赛 web wp

记一次校赛ctf的web题解。。其实我打的时候一道都没做出来(目移)签个到吧!签到题也没能做出来的我属实是fw啊。。orz 进入题目后会跳转到一个公网上,有重定向,于是使用curl -v来查看原始响应,即可获得flag是的就…

异常课后作业2

Java项目中常用异常处理场景与实践总结 在Java项目开发中,异常处理是保障程序健壮性、可维护性的关键环节。合理的异常处理不仅能避免程序崩溃,还能为问题排查、用户体验优化提供有力支撑。本文将围绕Java项目中常见…

日总结 22

nvm(Node Version Manager)是一款轻量实用的 Node.js 版本管理工具,支持在同一设备上安装、卸载多个不同版本的 Node.js,可快速切换版本以适配不同项目的依赖需求,无需手动配置安装路径,能有效解决多项目开发中 …

Nlog配置文件nlog.config (.net core 6)

<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quo…

重组抗体:从 “天然提取” 到 “基因定制”,抗体技术如何改写生物医药格局?

提到 “抗体”,你可能会想到疫苗接种后身体产生的 “免疫卫士”—— 但在科研、诊断和治疗中,我们需要的往往是 “精准可控” 的抗体。传统抗体(如多克隆抗体、杂交瘤单克隆抗体)要么特异性差、要么生产不稳定,而…

2025年主流数据分类分级工具全面对比与选型指南

2025年主流数据分类分级工具全面对比与选型指南在数据安全法规日益严格的2025年,企业选择合适的数据分类分级工具已成为合规运营和风险管控的核心环节。本文从实际选型需求出发,通过六大关键维度深度对比市场主流产品…

Http协议解析

一、概述 超文本传输协议(Hyper Text Transfer Protocol,简称HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 1.1 发展历史起源:HTTP的发展是由蒂姆伯纳斯-李于1989…

大模型应用开发技术路线(下):智能代理与多模态应用开发指南

本文系统阐述智能代理与多模态应用的开发技术,从架构设计到实战落地,涵盖智能代理的四大设计模式与四步开发法,多模态应用的模型选择与模态融合策略,并总结五大常见陷阱及解决方案,助力开发者构建自主可控、自然高…

NOIP 2024 T4 树上查询 小结

这个也是写给自己看的。 首先可以看每一种答案取到的范围。 然后就是两个区间求交的长度会大于等于 k。 这个比较好求。 稍微有点难的部分就是他的答案区间被我的目标区间包含。 这个我一开始在考场上写的是 cdq,然后…

高性能计算-CUDA-mma PTX 指令行为分析

1. 介绍:PTX 指令集中 WMMA 矩阵计算从共享内存加载数据到 fragment 片段使用的封装API是 load__matrix_sync,其底层 PTX指令与mma 一致,并且 fragment 布局一致。本文介绍底层 ldamatrix、stmatrix 指令的行为,并…

NOIP 2022 T3 建造军营 小结

写给自己看的。 这个题比 T2 简单多了。 就是你显然考虑缩点。 缩完之后就变成了一棵树。 那么对于这棵树你就可以进行 dp 了。 设 \(f_{i,0/1}\) 表示 \(i\) 子树内是否有军营。 转移还是比较好写的。 就是要预处理出…