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`)
- 索引列中的值必须是唯一的,但是允许NULL值。建立唯一索引的目的大部分时候都是为了该属性列的数据的唯一性,而不是为了查询效率。一个表允许多个列创建唯一索引。
- 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);
前缀索引
- 在文本类型如BLOB、TEXT或者很长的VARCHAR列上创建索引时,可以使用前缀索引,数据量相比普通索引更小,可以指定索引列的长度,但是数值类型不能指定。
- 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.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件会得膨胀很快。