mysql索引类型 | 青训营笔记

110 阅读2分钟

mysql索引类型

主键索引

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

数据不允许重复,不允许为null,一个表只能有一个主键

ALTER TABLE table_name ADD PRIMARY KEY (column);

普通索引

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

MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和NULL值。一个表允许多个列创建普通索引。

ALTER TABLE table_name ADD INDEX index_name (column);

唯一索引

ALTER TABLE `table_name` ADD UNIQUE (`column`)
  1. 索引列中的值必须是唯一的,但是允许NULL值。建立唯一索引的目的大部分时候都是为了该属性列的数据的唯一性,而不是为了查询效率。一个表允许多个列创建唯一索引。
  2. ALTER TABLE table_name ADD UNIQUE (column);

全文索引

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

主要是为了快速检索大文本数据中的关键字的信息。字段长度比较大时,如果创建普通索引,在进行like模糊查询时效率比较低,这时可以创建全文索引,基于倒排索引,类似于搜索引擎。MyISAM存储引擎支持全文索引,InnoDB 存储引擎在 MySQL 5.6.4 版本中也开始支持全文索引。

ALTER TABLE table_name ADD FULLTEXT (column);

前缀索引

  1. 在文本类型如BLOB、TEXT或者很长的VARCHAR列上创建索引时,可以使用前缀索引,数据量相比普通索引更小,可以指定索引列的长度,但是数值类型不能指定。
  2. ALTER TABLE table_name ADD KEY(column_name(prefix_length));

组合索引

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

指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀原则。

主键索引、普通索引、唯一索引等都可以使用多个字段形成组合索引。例如,ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 );

索引的不足 1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一索引文件。

2.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件会得膨胀很快。