对于查询中需要作为查询条件的字段,可以考虑建立索引,当然,最终还要根据性能的需要决定是否建立索引。
建立索引时也要考虑维护成本,不能无序地创建索引。
下面介绍构建战略性索引的策略
1.B树索引 b tree
2.位图索引 bitmap
位图索引不同于传统的B树索引,其原理是根据数据列的离散值构建出一张位图。它应该建立在低基数列,适合集中读取。
不适合插入和修改,比B树索引节省空间。它主要应用于数据仓库和决策支持系统,特点是绝大多数操作是复杂的查询操作。
导入数据的操作也是采用批量导入的方式,几乎没有删除和更新操作。
位图索引的锁机制和B树索引不同,B树索引中包含所有键值非空的ROWID,而位图索引包含的是一个ROWID范围和范围
对应的编码,如果删除一条记录,那么不仅会锁住这条记录,而且会锁定位图索引中与这条记录同一索引范围内的所有记录。
由此可见,建立位图索引的表时,锁的最小粒度变成位图索引的范围。这就意味着多个用户并非访问时,表被锁定的概率大大
增大。因此,操作位图索引时,应采用批量修改、迅速提交的方式。
3.复合索引
当某个索引包含多个索引的列时,这种索引就称为复合索引。当查询多个条件为AND关系的数据时,可以使用复合索引快速定位
到该数据。对符合索引的使用,需要注意:
复合索引的使用建议:
5.函数索引
除了上述索引外,还有一些其他索引,其中用得比较多的是函数索引。函数索引可以是B树索引,也可以是位图索引,它将一个函数计算的结果存储在索引中,而不是
存储列数据本身。我们可以把基于函数的索引看作是一个虚拟列上的索引。总之,索引函数索引,是基于加工过的逻辑列创建的索引。
函数索引适用于基于基础表中一个或者多个列的函数或表达式,查询语句条件列上包含函数的情况。
函数和表达式值预先计算并存放在索引中。要使用函数索引,就要分析表,启用查询重写。
设置函数索引,会减慢DML的速度,因为需要先求函数值或表达式。
视图
references:
https://blog.csdn.net/weixin_36269733/article/details/113538907
Hash散列索引
Hash散列索引是根据HASH算法来构建的索引。虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。
适合:
精确查找非常快(包括= <> 和in),其检索效率非常高,索引的检索可以一次定位,不像BTree 索引需要从根节点到枝节点,所以 Hash 索引的查询效率要远高于 B-Tree 索引。
不适合:
不适合模糊查询和范围查询(包括like,>,
不适合排序,数据库无法利用索引的数据来提升排序性能,同样是因为Hash值的大小不确定;
复合索引不能利用部分索引字段查询,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。
同样不适合键值较少的列(重复值较多的列)
————————————————
版权声明:本文为CSDN博主「zhoudiNEU」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36269733/article/details/113538907