Skip to content

Latest commit

 

History

History
31 lines (26 loc) · 2.33 KB

2021-3-10.md

File metadata and controls

31 lines (26 loc) · 2.33 KB

唯一索引与普通索引的区别是什么?使用索引会有哪些优缺点?

普通索引

普通索引的唯一任务是为了加快对数据的访问速度。因此,应该只为那些最应该出现在查询条件或者排序条件中的数据创建索引。只要有可能,就应该选择一个数据最整齐,最紧凑的数据列 (如一个整数类型的数据列)来创建索引。

唯一索引

如果能确定某个数据列只包含不同的值,在这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。 主要是为了保证数据的唯一性。

两者的区别

  • 普通索引允许数据重复,唯一索引不允许数据重复
  • 查询数据方面,普通索引和唯一索引没有差别
  • 更新数据时,change buffer机制,会导致普通索引和唯一索引在更新上有一定的区别。 change buffer的作用是为了降低IO操作,避免系统负载过高。change buffer将数据写入数据页的过程, 叫做merge。如果更新的数据页在内存中,直接更新数据,否则将更新操作记入change buffer,当下一次读取数据页 时,顺带merge到数据页中,change buffer也有定期merge策略。数据库正常关闭的过程中,也会触发merge。 对于唯一索引,因为更新前需要判断数据是否唯一,如果数据页在内存中,就可以直接判断,不在的话就需要将数据页读取到内存中再 进行判断,用不到change buffer。结论:唯一索引用不了change buffer,只有普通索引可以用。所以普通索引的更新效率更高

索引的优点

  • 可以通过建立唯一索引或者主键索引,保证数据库表中的每一行数据的唯一性
  • 建立索引可以大大提高检索的效率,以及减少表的检索行数
  • 在表连接的连接条件中,可以加速表与表直接的相连
  • 在分组和排序语句进行数据检索,可以减少查询时间中分组和排序时所消耗的时间
  • 在查询中使用索引可以提高性能

索引的缺点

  • 创建索引和维护索引,会耗费时间,数据量越多所需时间越长
  • 索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间
  • 当对表进行插入修改删除等操作时,索引也需要动态维护