Hash Index 通常可以用来解决等值查询的定位效率,特别是对以单表精确查询为主的应用场景尤为适合,如电信业务中的并发话单查询等(特别是内存基本充足的场景)。8a中的hash索引分为 Global Hash与Local Hash,两者主要的区别是应对的场景不同和计算Hash值的范围不同。在应对的场景上,Global Hash Index用于列中数据较分散的情况,而Local Hash Index则用于列中数据较集中的情况,因此,如果一个列中的数值的重复度较高,则应该使用Local Hash Index,否则需要使用Global HashIndex。在计算范围上,Global Hash Index是在整个列的全部数值范围上进行计算和维护,而Local Hash Index则是在各个DC上进行计算和维护。现场中,使用Global Hash Index的场景较多。
在使用上,GBase8a一定是首先进行智能索引过滤的,之后,如果发现查询条件中的等值查询条件列上建立了Hash Index,则使用Hash Index,否则进行全DC扫描。这一点,可以在Trace Log中明显观察到
对有实时数据加载的场景,可以先建立无索引的临时表加载数据,再将临时表内数据插入到带索引的同结构目标表中或在临时表上创建索引。一次性处理索引建立,可较大幅度的降低索引带来的维护成本。
注意事项:
Ø 索引是一种有损的优化手段,使用索引通常会带来维护的成本,会影响数据加载及DML操作的性能,实际使用时需根据具体需求而定
Ø 选择建立hash索引的列应尽量选择重复值较少的列,否则hash冲突严重,影响hash索引的性能
Ø 二进制类型的列不适合使用HASH索引
Ø 创建索引时,只能指定单列,不能指定多列创建联合索引