调整为唯一索引 唯一索引命名_作为唯一索引


全文概要:

1.什么是索引 2.索引的种类及区别 3.有那些索引引擎

一、什么是索引

索引是对数据表中的一列或多列进行排序的一种结构,使用索引课快速访问数据表中的特定信息

二、索引的种类及区别

  • 普通索引:可重复可为空,纯粹为加快检索速度
  • 唯一索引:不可重复但是允许为空值
  • 主键索引:特殊的唯一索引,不允许空值
  • 组合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使用这些字段的最左边字段时,索引才会被使用
  • 全文索引:通过大文本中某个关键字,就能找到该字段所属记录行
  • 空间索引:对空间数据类型的字段建立的索引

相关概念:

  • 非聚簇索引:唯一索引、组合索引、普通索引
  • 聚簇索引:在Innodb中,聚簇索引默认是主键索引

如果表中未键主键呢?

如果没有主键,则按照下列规则来建聚簇索引

  1. MySQL会判断表中是否存在唯一且不为空的字段,若有,则该字段成为本表的聚簇索引
  2. 如果没有这样的字段,会隐式定义一个主键来作为聚簇索引

三、索引引擎

主要讲目前主流的两个索引引擎:

  • MyISAM引擎:使用b+tree作为索引,叶子节点存放的是记录地址。MyISAM中主索引与辅助索引形式是一样的,主索引要求key不能重复,辅助索引key可以重复
  • InnoDB引擎:与MyISAM索引与数据分开存放不同的是,InnoDB引擎数据文件本身就是一个索引,InnoDB引擎数据存放是b+tree结构组织存放的,叶子节点包含全部的数据信息,InnoDB引擎辅助索引叶子节点存放的是主键。

所以,InnODB的普通索引,实际上会扫描两遍:

第一遍:由普通索引找到主键;

第二遍:由主键索引找到行记录;