索引有几种
MYSQL的索引主要分为主键索引(PRIMARY KEY),唯一索引(UNIQUE) ,普通索引(INDEX)和全文索引(FULLTEXT) 。
- 主键索引:数据记录里面不能有null,内容不能重复,在一张表中不能有多个主键索引。
- 普通索引:使用字段关键字建立的索引,主要是提高查询速度。
- 唯一索引:字段数据是唯一的,数据内容能为null。一张表中可以添加多个唯一索引。
- 全文索引:老版本中只有myisam引擎支持全文索引,(mysql5.5以后InnoDB支持全文索引)。mysql中全文索引不支持中文。一般使用sphinx集合coreseek来实现中文的全文索引。仅适用于 CHAR, VARCHAR和 TEXT列。
索引的建立
- 主键索引的创建方式:
ALTER TABLE table_name ADD PRIMARY KEY ( column_name )
- 唯一索引的创建方式
ALTER TABLE table_name ADD UNIQUE (column_name)
CREATE UNIQUE INDEX index_name ON table_name (column_name)
- 普通索引的创建方式
ALTER TABLE table_name ADD INDEX index_name ( column_name )
CREATE INDEX index_name ON table_name (column_name)
- 全文索引的创建方式
ALTER TABLE table_name ADD FULLTEXT ( column_name )
左前索引原则
最左前缀原则:顾名思义是最左优先,以最左边的为起点任何连续的索引都能匹配上。
左前索引主要是在复合索引中,给两个或多个字段建立了复合索引后。
在sql语句的条件中,只有复合索引前面的字段在条件的前面时,该索引才起作用。
例如:复合索引index(a,b),在使用where或者orderby条件时,如果只有条件b的,该索引不会生效,必须有条件a且必须在条件b的前面该索引才会生效。
索引的优缺点
优点
- 可以保证表中的每一行的数据唯一性
- 加快数据索引速度
- 加速表与表之间的连接
- 在使用分组和排序子句进行数据检索时,有很显著减少查询中分组和排序时间
- 通过使用索引,可以在时间查询的过程中,使用优化隐藏器,提高系统的性能
缺点
- 创建索引和维护索引消耗时间,随着数据量的增长而增长
- 索引需要占用物理空间,除了表数据空间以外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,占用空间会更大,如果数据变动,索引也要动态的维护。