MySql的索引(2)

索引是数据库管理系统中一个 已经排序好的 数据结构,以协助快速查询、更新数据操作。通常使用B树或B+树。

在数据库管理系统中还维护着满足特定条件查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法,这样的数据结构就是索引

索引是需要花费代价的

  1. 增加数据库存储空间,索引是单独占用物理空间的
  2. 在插入、修改数据时,索引也要随之变动。随数据量越来越大,耗时也会增加

索引的好处

  1. 唯一索引可以保证每一行数据的唯一性
  2. 可以加快数据的检索速度
  3. 可以加快表和表之间的链接,特别是实现数据的参考完整性方面
  4. 在使用分组与排序子句时,也同样可以使用到索引
  5. 优化器会分析查询语句,进而使用索引等方法进行优化查询

创建索引时要考虑使用场景

  1. 在经常需要搜索的列上,可以加快搜索的速度
  2. 在主键列上,强制此列的唯一性和组织表中数据的排列结构
  3. 在经常链接表的列上创建索引,可以加快表链接
  4. 需要使用范围查询的列上创建索引,因为索引是有序的,其条件的范围也是有序的
  5. 在经常排序的列上创建索引,利用了索引的有序性
  6. Where子句中经常出现的列,创建索引,可以加快判断速度

不要创建索引的场景

  1. 不经常使用的列不应该创建索引,减少维护索引的时间与占用空间
  2. 对于只有很少数量值的列也不应该增加索引,如果性别列的值,只有2~3种,创建索引并不是一定会提高效率
  3. 对于一些特定类型的列不要创建索引,如 text, image, bit 等,因为这些列的值要么很大,要么值很少
  4. 当修改性能远大于检索性能时,不应该创建索引。这是一个矛盾的双方:增加索引,提高检索性能,但修改性能降低;减少索引,降低检索性能,提高修改性能。