数据库索引

2018-05-10  本文已影响0人  乐百事52淑熙

索引是什么:

索引就像是书的目录,是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。

为什么建立索引?

①  建立索引的列可以保证行的唯一性,生成唯一的rowId

②  建立索引可以有效缩短数据的检索时间

③  建立索引可以加快表与表之间的连接

④  为用来排序或者是分组的字段添加索引可以加快分组和排序顺序

建立索引又有哪些缺点呢?

①  创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大

②  创建索引和维护索引需要空间成本,每一条索引都要占据数据库的物理存储空间,数据量越大,占用空间也越大(数据表占据的是数据库的数据空间)

③  会降低表的增删改的效率,因为每次增删改索引需要进行动态维护,导致时间变长

什么情况下需要建立索引?

①总的来说就是数据量大的,经常进行查询操作的表要建立索引

②表中字段建立索引应该遵循几个原则:

1)越小的数据类型通常更好:越小的数据类型通常在磁盘、内存中都需要更少的空间,处理起来更快。

2)简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂,处理起来也更耗时。

3)尽量避免NULL:应该指定列为NOT NULL。含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。

4)对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义,所以索引的建立应当更多的选取唯一性更高的字段。

③表与表连接用于多表联合查询的约束条件的字段应当建立索引

④用于排序的字段可以添加索引,用于分组的字段应当视情况看是否需要添加索引。

⑤添加多列索引的时候,对应的多条件查询可以触发该索引的同时,索引最左侧的列的单条件查询也可以触发。

⑥如果有些表注定只会进行查询所有,也就没必要添加索引,因为查询全部只能进行全量搜索即扫描全表。

索引的类型有哪些?

oracle:

逻辑上:

Single column 单列索引:索引只有一列

Concatenated 多列索引:多列构成的索引

Unique 唯一索引:不重复的数据列才能构建唯一索引(可以为null)

NonUnique 非唯一索引:数据列可以重复

Function-based函数索引:为了避免由于在条件匹配时引入函数,导致执行计划不再使用索引,oracle提供了基于函数的索引,进而解决上述问题,提高访问效率。

Domain 域索引:建立的Oracle Text索引就是域索引

物理上:

Partitioned 分区索引

NonPartitioned 非分区索引

B-tree:

Normal 正常型B树

Rever Key 反转型B树

Bitmap 位图索引

索引的结构:

B-树:

个人公号:【排骨肉段】,可以关注一下。

上一篇 下一篇

猜你喜欢

热点阅读