一、索引简介
1、定义:索引就是帮助mysql高效获得数据的数据结构,简单理解就是“排好序的快速查找的数据结构”
2、索引详解:
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,
这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。下图就是一种可能的索引方式示例:
左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址
为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在一定的复杂度内获取到相应数据,从而快速的检索出符合条件的记录。
二、mysql的索引结构
1、最主要的是B树(Balance Tree多路平衡查找树)https://www.cnblogs.com/xiaoxi/p/6868087.html
B树简单的说就是增强版的二叉搜素树,实际上就是多叉搜索树,相比较于二叉搜索树,一个节点上是指定了一个范围,这样子可以减少网络IO?因为,二叉搜索树如果是数据量很大的话,树的深度就很深,这样无异于增加了IO开销,而B树就是妳补了这点缺陷。
B+树又是B树的增强版,B+树的特点就是,所有的关键字在叶子节点上都有,可以说,查找一个值的路径长度是一致的,问题来了那么B树都有了,为什么还要B+树呢?https://blog.csdn.net/zk3326312/article/details/79377680,mysql中的innodb引擎用的就是B+树,他是将所有的主键形成主键索引,并保存在文件中
简单的说相比较于B树,优势一、B+树的根节点上存的都是索引信息,只有叶子节点上存的是数据信息,这样读到内存中的树索引信息会多一点,也不会出现B树内存太大,不够的问题,优势二、B树要遍历所有的数据需要将整棵树都要读到内存里,但是B+树的所有数据都在同一层的叶子节点上,而且从左到右是有序的,此时B+树在加一个链表就可以将叶子节点上的数据都串起来。
三、索引分类
单值索引:即一个索引只包含单个列,一个表可以有多个单列索引
唯一索引:索引列的值必须唯一,但允许有空值
复合索引:即一个索引包含多个列
四、索引语法
1、创建:
①CREATE [UNIQUE ] INDEX indexName ON mytable(col01,col02,col03......);
②ALTER TABLE 表名 ADD [UNIQUE ] INDEX [indexName] ON (columnname(length))
2、删除:DROP INDEX [indexName] ON mytable;
3、查看:SHOW INDEX FROM table_name\G
4、alter命令:
有四种方式来添加数据表的索引:
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
五、Explain
1、使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。
经常用来分析sql有没有用到索引以及用到哪些,多少索引
2、语法:Explain + SQL语句
显示的是: