MySQL索引
主键索引(PRIMARY KEY)
ALTER TABLE `table_name` ADD PRIMARY KEY (`column`)
主键索引 是一种特殊的唯一索引,不允许有空值。一个表只能有一个主键(一般是在建表的时候同时创建主键索引)。
与之类似的,外键索引 如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件
唯一索引(UNIQUE)
ALTER TABLE `table_name` ADD UNIQUE (`column`)
唯一索引 与普通索引类似,不同的就是:普通索引允许被索引的数据列包含重复的值。而唯一索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一
普通索引(INDEX)
ALTER TABLE `table_name` ADD INDEX index_name (`column`)
普通索引 是最基本的索引,它没有任何限制。普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column = …)或排序条件(ORDER BY column)中的数据列创建索引。
组合索引
ALTER TABLE table_name ADD INDEX name_city_age (name(10),city,age);
建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:
name,city,age
name,city
name
为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引。下面的几个SQL就会用到这个组合索引:
SELECT * FROM mytable WHREE username="admin" AND city="郑州"
SELECT * FROM mytable WHREE username="admin"
而下面几个则不会用到:
SELECT * FROM mytable WHREE age=20 AND city="郑州"
SELECT * FROM mytable WHREE city="郑州"
如果分别在 usernname,city,age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。
因为虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。
全文索引(FULLTEXT)
ALTER TABLE `table_name` ADD FULLTEXT (`column`)
全文索引是MyISAM的一个特殊索引类型,它查找的是文本中的关键词,主要用于全文检索。
MySQL InnoDB从5.6开始已经支持全文索引,但InnoDB内部并不支持中文、日文等,因为这些语言没有分隔符。可以使用插件辅助实现中文、日文等的全文索引。详见:12.9.5 Full-Text Restrictions
给多字段添加同一索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
查看索引
show index from table_name;

浙公网安备 33010602011771号