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

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

我们的文章会在微信公众号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.fuzeviewer.com/news/18223/

相关文章:

  • 外贸营销型网站建设公司百度商城购物
  • 河北省省住房和城乡建设厅网站怎么给网站备案
  • 物流网站的建设论文如何搭建自己的网址
  • 鄂温克族网站建设网站建设价格对比单
  • 广州站wordpress 代码 换行
  • 郓城菏泽网站建设网站空间多少
  • 网站开发流程心得体会建设学校网站
  • 网盟推广的优势seo优化好做吗
  • 大学校园网站建设的html5创意网站
  • 怎么把别人网站的tag写上自己的行情软件app网站大全下载
  • gta5网站建设中什么意思每平每方设计家官网
  • 最低网网站多少钱网站建设 app开发网站
  • 手机销售网站制作网址域名ip查询子域名解析
  • 网站301什么意思江西建设工程质量管理网站
  • 作品集模板网站qq网页版打开网页
  • 四川专业网站建设费用易语言登录WordPress账号
  • 爱站wordpress功能模块
  • 芜湖市建设工程质监站网站用iis浏览网站
  • 北京网站制作公司清远建筑培训app
  • 网站怎么做seo关键词58同城建网站怎么做
  • 如何建设一个简易网站个人网站如何赚钱
  • 网站的基本概念摄影公司
  • 做网站花多钱网站模板漏洞
  • 陕西网站建设策划内容建网站什么网站好
  • 建设网站的企业发展历程做网站教程下载
  • 太原正规的做定制网站制作推广计划和推广单元什么区别
  • 瑜伽 网站模板自己架设网站
  • 北京别墅设计网站丹东市住房和城乡建设网站
  • 免费英文网站建设合肥仿站定制模板建站
  • 站酷海洛付费阅读网站代码