MySQL 索引类型:主键索引、唯一索引、普通索引、全文索引、组合索引

目录

MySQL 索引概念

MySQL 索引就好比一本书的目录,它会让你更快的找到内容。显然目录(索引)并不是越多越好,假如这本书 1000 页,有 500 页也是目录,它当然效率低。目录是要占纸张的,而索引是要占磁盘空间的。

MySQL 索引的两种主要结构

hash

hash 索引在 MySQL 比较少用。它把数据的索引以 hash 形式组织起来,因此当查找某一条记录的时候,速度非常快。但是因为是 hash 结构,每个键只对应一个值,而且是散列的方式分布。所以它并不支持范围查找和排序等功能。

B+ 树

B+ tree 是 MySQL 使用最频繁的一个索引数据结构。数据结构以平衡树的形式来组织。因为是树型结构,所以更适合用来处理排序和范围查找等功能。相对 hash 索引,B+ 树在查找单条记录的速度虽然比不上 hash 索引,但是因为更适合排序等操作,所以它更受用户的欢迎。毕竟不可能只对数据库进行单条记录的操作。

MySQL 常见索引有:

  • 主键索引
  • 唯一索引
  • 普通索引
  • 全文索引
  • 组合索引

PRIMARY KEY(主键索引)

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

UNIQUE(唯一索引)

ALTER TABLE `table_name` ADD UNIQUE (`column`)

INDEX(普通索引)

ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

FULLTEXT(全文索引)

ALTER TABLE `table_name` ADD FULLTEXT ( `column` )

组合索引

ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

MySQL 各种索引区别

  • 普通索引:最基本的索引,没有任何限制
  • 唯一索引:与”普通索引”类似,不同的就是索引列的值必须唯一,但允许有空值
  • 主键索引:它是一种特殊的唯一索引,不允许有空值
  • 全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时且占空间
  • 组合索引:为了更好地提高 MySQL 效率可建立组合索引,遵循”最左前缀”原则

#mysql