HASH分区表的好处和注意点

简介: 一、好处   1、对于分区本生不需要定期的进行分区加入(范围分区和LIST分区需要定期的对新加入的值新建分区)   2、可以消除访问热点块及索引热点块,由于索引是排序后的结构,对于一列自增的列加入范围分区,可能对索引的高位块进行频繁的数据插入,导致频繁的写入和分裂      对于这样的索引如果加入散列分区索引即可消除。
一、好处
  1、对于分区本生不需要定期的进行分区加入(范围分区和LIST分区需要定期的对新加入的值新建分区)
  2、可以消除访问热点块及索引热点块,由于索引是排序后的结构,对于一列自增的列加入范围分区,可能对索引的高位块进行频繁的数据插入,导致频繁的写入和分裂
     对于这样的索引如果加入散列分区索引即可消除。
二、注意
  1、分区不能太多,典型的大约1000个分区,那么在分区触发(谓词导致索引范围扫描)的并行访问操作时可能更慢,因为有非常多额外的分区维护操作(我曾经遇到过1个1844个HASH分区,导致的并行性能问题)
  2、散列索引在维护方面可能和范围和LIST分区有一些区别。
  详细见:
  http://blog.itpub.net/7728585/viewspace-756659/
  http://blog.itpub.net/7728585/viewspace-756736/
  http://blog.itpub.net/7728585/viewspace-756859/
  http://blog.itpub.net/7728585/viewspace-756884/
  http://blog.itpub.net/7728585/viewspace-757019/
  http://blog.itpub.net/7728585/viewspace-757029/
  3、对于长期使用范围扫描的字段不适合散列分区,因为这样会导致多个分区扫描,而对于经常唯一扫描的字段适合建立HASH分区。


 select /*+  gather_plan_statistics */  * from  t_pe_h where i>9990

----------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name     | Starts | E-Rows |E-Bytes| Cost (%CPU)| Pstart| Pstop | 
----------------------------------------------------------------------------------------------------
|   1 |  PARTITION HASH ALL                |          |      1 |     10 |   230 |     3   (0)|     1 |     4 |  
|   2 |   TABLE ACCESS BY LOCAL INDEX ROWID| T_PE_H   |      4 |     10 |   230 |     3   (0)|     1 
|*  3 |    INDEX RANGE SCAN                | T_PE_H_L |      4 |     10 |       |     2   (0)|     1 |     4 |  
----------------------------------------------------------------------------------------------------

 select /*+  gather_plan_statistics */  * from  t_pe_h where i=9990


Plan hash value: 1195440189


----------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name     | Starts | E-Rows |E-Bytes| Cost (%CPU)| Pstart| Pstop |
----------------------------------------------------------------------------------------------------
|   1 |  PARTITION HASH SINGLE             |          |      1 |      1 |    23 |     2   (0)|     1 |     1 |
|   2 |   TABLE ACCESS BY LOCAL INDEX ROWID| T_PE_H   |      1 |      1 |    23 |     2   (0)|     1 
|*  3 |    INDEX UNIQUE SCAN               | T_PE_H_L |      1 |      1 |       |     1   (0)|     1 |     1 |
----------------------------------------------------------------------------------------------------

  
  4、分区的个数是2的N次密。
  5、对于自增字段非常适合建立HASH分区,这样数据非常适合均匀的HASH分布,对于一个字段建立HASH分区最好事先对字段进行HASH统计,来测试是否能够达到均匀的分布。
select ora_hash(it, 7) + 1 ora_hash, count(*) 
from test1 
group by ora_hash(it, 7) 
order by 1;


ora_hash('strings', N, 0 )
    strings: 输入值
    N:最大hash bucket的值
    0:起始hash bucket值,缺省是
  
  6、对于所有分区类型,如果想用LOCAL分区索引来保证唯一性,那么唯一和主键约束(唯一索引也必须)必须包含有整个(注意是整个,如果分区键是两个字段,那么两个字段都要包含)分区键本生,或者说是子集
SQL>   CREATE TABLE t_pe_h (i NUMBER, j NUMBER , f varchar2(20),k varchar2(20))
  2         PARTITION BY hash(i,j)
  3             (PARTITION p1,
  4              PARTITION p2,
  5              PARTITION P3,
  6              PARTITION P4);
 
Table created
 
如下可以: 
SQL> create unique index t_pe_h_l on t_pe_h(i,j) local;
 
Index created
 
不行: 
SQL> create unique index t_pe_h_l on t_pe_h(i) local;
 
create unique index t_pe_h_l on t_pe_h(i) local
 
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE index
 
可以: 
SQL> create unique index t_pe_h_1 on t_pe_h(i,j,f) local;
 
Index created

  
SQL> alter table t_pe_h add constraint t_pe_h_pk primary key(i,j) using index t_pe_h_l;
 
Table altered
 
相关文章
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
624 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
10月前
|
缓存 监控 算法
提高 Webpack 热更新的性能
【10月更文挑战第23天】还可以进一步深入探讨热更新性能优化的具体案例、不同场景下的优化策略,以及与其他相关技术的结合应用等方面的内容。通过全面、系统地了解热更新性能优化的方法和技巧,能够更好地利用这一功能,为项目的成功开发提供有力保障。同时,要不断关注技术的发展动态,以便及时掌握最新的热更新技术和最佳实践。
|
12月前
|
存储 安全 物联网
探索未来网络:物联网安全的最佳实践与挑战
在数字化浪潮中,物联网作为连接万物的关键技术,已深刻改变我们的工作与生活方式。然而,随着其应用的广泛化,安全问题日益凸显,成为制约物联网发展的重要瓶颈。本文旨在深入探讨物联网的安全架构、风险点及应对策略,通过分析当前技术趋势和实际案例,提出一套切实可行的安全防护方案,以促进物联网技术的健康发展。
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:智能心理诊断与辅助
【8月更文挑战第9天】 使用Python实现深度学习模型:智能心理诊断与辅助
152 2
|
数据可视化 Java 测试技术
JMeter 如何实现 Elasticsearch 8.X 性能测试?
JMeter 如何实现 Elasticsearch 8.X 性能测试?
|
测试技术
深入理解与应用软件测试中的黑盒测试方法
【5月更文挑战第28天】 在现代软件开发的生命周期中,软件测试是确保产品质量和用户满意度的关键步骤。黑盒测试作为一种重要的测试手段,其核心在于无需了解内部代码结构,而是通过功能性的角度来验证软件行为的正确性。本文将探讨黑盒测试的基本概念、主要类型及其在现实场景中的应用,并讨论如何有效地设计黑盒测试用例以提高测试覆盖率和发现潜在缺陷的能力。
|
SQL 安全 数据库
掌握SQL:数据库操作与查询的精髓
一、引言 在数据驱动的时代,数据库是任何组织或项目不可或缺的一部分
|
机器学习/深度学习 数据采集 存储
【机器学习】K-近邻算法(KNN)全面解析
K-近邻算法(K-Nearest Neighbors, KNN)是一种基于实例的学习方法,属于监督学习范畴。它的工作原理简单直观:给定一个训练数据集,对新的输入实例,KNN算法通过计算其与训练集中每个实例的距离,找出距离最近的K个邻居,然后根据这些邻居的类别(对于分类任务)或值(对于回归任务)来预测新实例的类别或值。KNN因其简单高效和无需训练过程的特点,在众多领域中得到广泛应用,如模式识别、推荐系统、图像分类等。
549 0
|
传感器 存储 监控
引领未来生活方式的智慧之家——物联网在智能家居中的应用
在当今科技日新月异的时代,物联网已经渗透到了我们生活的方方面面,其中最具代表性的就是智能家居。本文将探讨物联网在智能家居中的应用,并剖析其对人们生活方式的影响。从智能家居系统的构成、数据收集与分析、设备互联等角度深入阐述,旨在帮助读者更好地理解物联网技术在智能家居中的重要性和优势
815 4
|
消息中间件 存储 监控
深入浅出:理解Kafka的核心概念与架构
深入浅出:理解Kafka的核心概念与架构
779 0