索引是数据库管理系统中一个 已经排序好的 数据结构,以协助快速查询、更新数据操作。通常使用B树或B+树。
在数据库管理系统中还维护着满足特定条件查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法,这样的数据结构就是索引。
索引是需要花费代价的
- 增加数据库存储空间,索引是单独占用物理空间的
- 在插入、修改数据时,索引也要随之变动。随数据量越来越大,耗时也会增加
索引的好处
- 唯一索引可以保证每一行数据的唯一性
- 可以加快数据的检索速度
- 可以加快表和表之间的链接,特别是实现数据的参考完整性方面
- 在使用分组与排序子句时,也同样可以使用到索引
- 优化器会分析查询语句,进而使用索引等方法进行优化查询
创建索引时要考虑使用场景
- 在经常需要搜索的列上,可以加快搜索的速度
- 在主键列上,强制此列的唯一性和组织表中数据的排列结构
- 在经常链接表的列上创建索引,可以加快表链接
- 需要使用范围查询的列上创建索引,因为索引是有序的,其条件的范围也是有序的
- 在经常排序的列上创建索引,利用了索引的有序性
- Where子句中经常出现的列,创建索引,可以加快判断速度
不要创建索引的场景
- 不经常使用的列不应该创建索引,减少维护索引的时间与占用空间
- 对于只有很少数量值的列也不应该增加索引,如果性别列的值,只有2~3种,创建索引并不是一定会提高效率
- 对于一些特定类型的列不要创建索引,如 text, image, bit 等,因为这些列的值要么很大,要么值很少
- 当修改性能远大于检索性能时,不应该创建索引。这是一个矛盾的双方:增加索引,提高检索性能,但修改性能降低;减少索引,降低检索性能,提高修改性能。