数据库索引是啥?有什么用?原理是什么?最佳实践什么?
索引是啥
一个索引是这样的数据结构:从数据上来说,不仅包含了从表中某一列或多列的数据拷贝,同时,还包含了指向这列数据行的链接;
从结构上来说,索引中的数据还被组织成满足一定查找算法的数据结构,比如B树。这样提高了从数据库的查询效率。
有什么用
创建索引可以提高数据的查询性能(improve speed of data retrieval operation)。具体来说:
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因(直接根据链接找而不是逐行扫描数据内容)。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
还具有监控数据库约束条件的作用,比如唯一索引。
建立索引的代价
根据上述的描述,可以知道,增加索引必然增加数据库存储空间的开销,同时在建立和修改索引时也要比没有索引多花额外的时间。
索引类型与索引方法
待添加。。。
最佳实践
指导思原则:修改性能和检索性能是相互矛盾的,当建立索引的弊大于利时,不要建索引。
应该建索引的情形
- 经常需要搜索的列上,可以加快搜索;
- 在经常连接的列上,可以加快连接;
- 在经常需要根据范围搜索的列上,索引已经排序,根据排好序的索引去找范围更快;
- 在经常需要排序的列上创建索引,索引已经排序,可以加快排序
不该建索引的情形
- 查询中很少使用的列上;
- 只有很少数据值的列上,因为数值值少,建了索引效果不明显,比如值只有0和1的情形;
- 某些数据类型如text,image等数据量大的列,建立和维护索引的开销大,作用却小。
未完待续。。。
参考文章:
【1】Database index -- Wikipedia.
【1】数据库索引的实现原理 by 辉仔