索引概述

 

        索引(index) 是帮助 MySQL 高效获取数据的数据结构(有序)。

 

        在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

 

索引的优缺点

 

优势: 提高数据检索的效率,降低数据库的IO成本。

 

           通过索引列对数据进行排序,降低数据排序的成本,降低CPU 的消耗;

 

劣势:索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍

 

          虽然索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE 。  因为更新表时,MySQL 不仅要保存数据,还要保存一下索引文件每次更新添加了索引的字段,都会调整因为更新所带来的键值变化后的索引信息;

 

mysql中InnoDB默认支持的B+Tree结构

B+Tree是在B-Tree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构

  1. B+节点关键字搜索采用闭合区间
  2. B+非叶节点不保存数据相关信息,只保存关键字和子节点的引用
  3. B+关键字对应的数据保存在叶子节点中
  4. B+叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系

刷新索引 索引对更新速度的影响_子节点

 

索引分类

 

1 ) 单值索引 :即一个索引只包含单个列,一个表可以有多个单列索引

 

2 ) 唯一索引 :索引列的值必须唯一,但允许有空值

 

3 ) 复合索引 :即一个索引包含多个列

 

 

索引语法

 

 

1.创建索引

 

CREATE [索引的种类] INDEX 索引的名字  [索引的类型] ON  表名 (字段名)

2.查看索引

show index from 表名;

3.删除索引

 

DROP INDEX 索引名 ON 表名;

4.ALTER命令

1). alter table tb_name add primary key(column_list);
 
    该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL 

2). alter table tb_name add unique index_name(column_list); 

    这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次) 

3). alter table tb_name add index index_name(column_list); 

    添加普通索引, 索引值可以出现多次。 

4). alter table tb_name add fulltext index_name(column_list); 

    该语句指定了索引为FULLTEXT, 用于全文索引

 

索引设计原则

 

(什么样的表适合创建索引) 

 

  对查询频次较高,且数据量比较大的表建立索引。

 

(什么样的字段适合创建索引)

 

2. 对经常在where子句中出现的字段建立索引

 

使用唯一索引,区分度越高,使用索引的效率越高。

 

对于插入、更新、删除等 DML 操作比较频繁的表来说,索引过多,会引入相当高的维护代价,降低 DML 操作的效率,增加相应操作的时间消耗。

 

5. 尽量使用短字段索引

 

6. 针对于复合索引,使用最左索引