简介
本文介绍MySQL的索引的类别。
按索引列的类型分类
普通索引、主键索引、唯一索引、外键索引、全文索引、联合索引。
索引类型 | 说明 |
普通索引 | 最基本的索引,它没有任何限制。 命令格式(help ‘create table’): {INDEX|KEY} [index_name] [index_type] (key_part,…) [index_option] … 删除索引命令格式: ALTER TABLE TABLE_NAME DROP {INDEX|KEY} index_name 或者 DROP INDEX index_name ON tbl_name [algorithm_option | lock_option] … |
唯一索引 | 与普通索引类似。 不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。 如果向唯一索引的列插入同样的数据会报错。 命令格式(help ‘create table’): [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (key_part,…) [index_option] … |
主键索引 | 特殊的唯一索引,一个表只能有一个主键,不允许有空值。 命令格式(help ‘create table’): [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (key_part,…) [index_option] … |
外键索引 | 1. 两表必须是InnoDB表,MyISAM不支持。 2. 外键列必须建立了索引,MySQL 4.1.2以后建立外键时会自动创建索引,较早的版本需显式建立。 3. 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以。 命令格式(help ‘create table’): [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (col_name,…) reference_definition |
全文索引 | 主要用来查找文本中的关键字,而不是直接与索引中的值相比较。 命令格式(help ‘create table’) {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (key_part,…) [index_option] … |
联合索引 | 多个字段上创建的索引,使用相关字段作为条件查询数据时遵循最左前缀集合。 |
按索引的数据结构分类
B-Tree索引,哈希索引,空间数据索引(R-Tree),全文索引,其他索引
索引类型 | 优点 | 缺点 |
B-Tree索引 (B+树) | 可以全键值、键值范围、最左前缀查找 | 组合索引必须满足最左前缀。 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化査找。 |
哈希索引 | 查找高效。(只支持等值操作:=, IN(), <=>) | 不支持部分索引列查询。 无法排序,不支持范围查询。 哈希冲突时索引维护的代价很高 |
空间数据索引(R-Tree) | 可以用任意维度组合查询 | MySQL支持不完善。 必须使用GIS相关函数。 |
全文索引 | ||
其他索引 |
请先
!