索引
HashData 数据仓库通常不用索引,因为大多数的分析型查询都需要处理大量数据,而顺序扫描时数据读取效率较高,因为每个段数据库(Segment)含有数量相当的数据,且所有 Segment 并行读取数据。
对于具有高选择性的查询,索引可以提高查询性能。
即使明确需要索引,也不要索引经常更新的字段。对频繁更新的字段建立索引会增加数据更新时写操作的代价。
仅当表达式常在查询中使用时才建立基于表达式的索引。
谓词索引会创建局部索引,可用于从大表中选择少量行的情况。
避免重复索引。具有相同前缀字段的索引是冗余的。
对于压缩 AO 表,索引可以提高那些指返回少量匹配行的查询的性能。对于压缩数据,索引可以降低需要解压缩的页面数。
创建选择性高的 B 树索引。索引选择性是指:表的索引字段的不同值总数除以总行数。例如,如果一个表有 1000 行,索引列具有 800 个不同的值,那么该索引的选择性为 0.8,这是一个良好的选择性值。
如果创建索引后查询性能没有显著地提升,则删除该索引。确保创建的每个索引都被优化器采用。
加载数据前务必删除索引。加载速度比带索引快一个数量级。加载完成后,重建索引。
位图索引适合查询而不适合更新业务。当列的基数较低(譬如 100 到 100000 个不同值)时位图索引性能最好。不要对唯一列、基数很高的列或者基数很低的列建立位图索引。不要为业务性负载使用位图索引。
一般来说,不要索引分区表。如果需要,索引字段不要和分区字段相同。分区表索引的一个优势在于:随着 B 树的增大, B 树的性能呈指数下降,因而分区表上创建的索引对应的 B 树比较小,性能比非分区表好。