在表中查找数据的时候,如果使用索引,则可以很快的查找到,如果不是用索引,就只能在表中的数据里一个一个比对。
索引相关的内容按照以下的目录结构展开

此文先讲述第一条,索引的分类
索引大体分为四类,分别是单列索引,组合索引,全文索引和空间索引
1、单列索引
单列索引是只包含单个列的索引,一个表可以有多个单列索引。
单列索引分为三种类型,分别是普通索引,唯一索引和主键索引
普通索引
任何列都可以做普通索引,可以为空,值也可以重复
唯一索引
索引列中的值必须是唯一的,可以为空
主键索引
主键索引必须是唯一的,而且不能为空
2、组合索引
组合索引是有多列组合构成。
遵循最左原则,先按照第一列排序,然后按照第二列,依次往后排序。。。
使用联合索引有以下优点:
(1)、减少建立索引开销
根据最左原则,如果建立了一个(col1,col2,col3)三列的索引,那么就相当于建立了(col1),(col1,col2)和(col1,col2,col3)三个索引,但是建立的索引表只需要一个即可,减少了增删改对索引表的操作。
(2)、覆盖索引
如果要执行查询的字段就在索引中,则无需回表,减少随机io操作,提高性能
例如:select col1,col2,col3 from test where col1=1 and col2=2
(3)、效率高
索引列越多,查询的效率越高(当然这里要考虑表的读写频率)。和单列索引相比,如果执行如下操作:
select from table where col1=1 and col2=2 and col3=3
那么单列索引需要分为三步执行,需要回表,但是组合索引第一次查询的时候就会筛选出所需要的数据,效率要高的多。
3、全文索引
全文索引是指在CHAR,VARCHAR,TEXT类型字段上使用的索引。只有在MyISAM存储引擎上可以定义,只要是为了方便查找字符串中字符的匹配
4、空间索引
空间索引是对空间数据类型GEOMETRY、POINT、LINESTRING和POLYGON字段上建立的索引,只有MyISAM上可以定义
以上四种索引的使用实例见:《MySQL索引详解(二)索引的使用》
参考资料
1、《MySQL性能调优与架构设计》
2、https://www.jianshu.com/p/0d6c828d3c70
网友评论