数据库:索引
索引是应用设计和开发的一个重要方面,如果索引太多,就会影响Insert,Update,Merge和Delete等数据修改语句的性能, 索引太少,又会影响Select,Insert,Update和Delete语句的性能。在这之间找到一个平衡点,对提高应用的性能至关重要。
经常发现,很多人是在应用开发完成后才想起索引,这是一种错误的做法, 如果从开发应用开始就清楚数据在应用中会以何种方式使用。那么就应该能够设计出更具针对性的索引。
索引是开发人员和DBA之间的桥梁。开发人员必须了解索引,清楚如何在应用中使用索引,而且知道何时使用索引(以及何时不使用索引)。 DBA则需要考虑索引的增长,空间使用以及其他物理特性,并考虑到索引对系统总体性能的影响。
B*Tree索引:B*Tree的构造类似于二叉树,通过键值就能快速访问一行数据, 或通过键值的某个范围内来定位多行数据。通过这种索引访问数据一般只需要几个I/O就能完成。这里B*Tree中的B不代表二叉(binary),而是代表平衡balanced。B*Tree索引并不是一颗二叉树。
索引组织表(index organized table): 是一种表,它从存储也是B*Tree结构,堆表(heap table)中的数据行是以一种无组织的方式存储的(哪儿有可用的空间,数据就放在哪儿),而IOT与之不同,IOT中的数据要按主键来存储和排序。
B*Tree 聚簇索引(B*Tree cluster index): 这是传统B*Tree索引的一个近似变体。B*Tree聚簇索引是对聚簇建立的索引。
降序索引(descending index)
反向键索引(reverse key index)
位图索引(bitmap index)
位图联结索引(bitmap join index)
基于函数的索引(function-based index)
应用域索引(application domain index)
B*Tree索引(所说的“传统”索引)是数据库中最常用的一类索引结构,其实现与二叉查找树很相似,它的目标是尽可能减少搜索数据所花费的时间。
注意:块级优化和数据压缩可能会使实际的块与图有所不同。
树最底层的块称为叶节点(leaf node) 或 叶块(leafblock), 其中包含各个索引键以及一个rowid(指向索引的行)。叶节点之上的内部块称为分支块(branch block) 数据的搜索会通过这种块最终抵达叶节点。