1.1 什么是索引
索引实际上也是一张表,该表主要保存了主键和索引字段,同时指向实体表的记录
1.2 索引的作用 优点和缺点
1.2.1 索引可以大大提高MySql的检索效率 但是需要索引建立在查询语句中的 where 条件的子句字段中
1.2.2 索引不能滥用 虽然索引会提高MySql的检索效率 但是索引是会影响更新表的效率的 因为在对表进行更新时 不仅要更新表数据 同时也会保存甚至重构索引 一般在同一个表内不能创建超过6个表
1.3 索引类型
1.3.1 FULLTEXT 全文索引,可以在建表、修改表(删除、增加、修改字段)、创建索引时使用,但是目前仅支持在 char、varchar、text 类型的字段上创建 主要作用是方便提升进行模糊查询的效率
1.3.2 HASH 因为 HASH 的唯一性和键值的形式,使得在使用时可以精确一步到位直接找到而非类似树形结构的逐级检索,所以很适合用来创建索引。但是仅适合在 “=”、“in” 时进行使用,而在进行范围查询、组合查询及排序时的效果并不理想
1.3.3 BTREE 是一种将索引值以一定算法存入到一个树形结构内的索引类型,每次查询都需要从树头root开始,然后遍历node最后找到leaf,是MySql默认和最常用的索引类型
1.3.4 RTREE 是类似于BTREE的一种索引类型 ,不常使用和BTREE相比优势在于范围查询
1.4 所以种类
1.4.1 普通索引:仅加速查询
1.4.2 唯一索引:加速查询并且列值必须唯一(可以为 null )比如针对于订单流水号、身份证号等
1.4.3 主键索引:在表中的主键上使用加速查询并且列值必须唯一(不可以为 null )
1.4.4 组合索引:多列值组成一个索引,便于组合搜索,使用方法:将 a、b、c 创建为组合索引时,会按照 a/b/c 的形式进行索引存储,只有在包含左前缀 a 的时候才会使用索引 比如( a , b , c )、( a , b)、( a )时才会使用索引,而在不包含左前缀的时候是不会使用索引的 比如 ( b , c )、( a , c )、( b )、( c )时是不会使用索引的
1.4.5 全文索引:只能在 char、varchar、text 等文本内容上使用,主要作用是方便进行范围查询时提升效率