一.索引
1.1 索引概念
MySQl官方对索引的定义为:索引(index)是帮助MySQL高效获取数据结构(有序)。在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引,如下面的示意图所示
左边是数据库,一共有二列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Coi2的查找,可以维护一个右边所示多少二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找快速获取相应数据。一般来说索引本身也很大,不可能全部存储内存中,因此索引往往以索引文件的形式存储在磁盘上,索引是数据库中用来提高性能的最常用的工具。
1.2索引的优劣势
优势
提高数据检索的效率,降低数据来的IO成本(输入输出)
通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗
劣势
索引列是需要占用空间的,也就是说索引是一张表,表中保存了主键索引字段虽然索引检索效率快,但是增加了数据更新的成本(对表进行INSERT UPPATE DELETE),
因为更新表时,MYSQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引的信息。
重点:如果想设计索引,必须知道其优劣势
如果不知道其优劣势的话创建索引,不但会引起IO成本的增加,更可能会造成数据库设计崩盘,数据操作反而变慢。
1.3索引类型
索引是在MYSQL的存储引擎层中实现的,而不是在服务器层实现的。所以每种存储引擎的索引都不一定完全相同,也不是所有的引擎都支持所有的索引类型的,MYSQL目前提供了以下4种索引:
BTREE索引;最常见的索引类型,大部分索引都支持B树索引。
HASH索引:只有Memory引擎支持,使用场景简单。
R-tree索引(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通用。使用较少,不做特别介绍。
Full-text(全文索引):全文索引也是MyISAM的一个特殊索引类型,主要用于全文索引,InnoDB从Mysql5.6版本开始支持全文索引。
1.4索引分类
1:单值索引:即一个索引只包含单个列,一个表可以有多个单列索引,
2:唯一索引:索引列得到值必须唯一,单允许有空值
3:复合索引:即一个索引包含多少个列
4:主键索引:即表中主键列
1.5索引类型
索引在创建表的时候,可以同时创建,也可以随时增加新的索引。
1:查看索引
show index from 表名;
2:创建索引
语法:cre