本篇文章主要讲述MySQL索引事务
所谓的索引index就是指:目录~~
索引存在的意义:加快查找的速度(省略了遍历的过程),但付出了一定的代价~
付出的代价如下:
- 1.需要付出额外的空间代价来保存索引数据
-
- 2.索引可能会拖慢新增,删除,修改数据的速度
但是,在总体来说,还是认为索引的利大于弊~~
在实际开发中,查询场景一般要比增删改频率高很多
查看索引:
show index from 表名;
创建索引:
- create index 索引名 on 表名(列名);
-
- 索引名称可任意取
比如:把表中的内容,根据name搞了一份目录(索引)出来~
create index index_student_name on student(name);
创建索引的操作,可能很危险,如果表里的数据很大,这个建立索引的开销也会很大……,其实最好的做法就是:创表之初就把索引设定好了,如果表里已经有很多数据了,那么,索引就别动了~
删除索引:
drop index 索引名 on 表名;
删除索引和创建索引类似,删除索引也是有风险的~~
索引可以加快查询的速度,其实在索引背后的数据结构(查询)是B+树(为数据库索引量身定做的数据结构)~~B+树我们不做特别要求,但是对于B+树的特点与优势咋说咱也得知道点不??
B+树特点:
整个树的所有节点,都包含在叶子节点中(所有非叶子节点中的key最终都会出现在叶子节点中~~)
- IO:input output------>输入输出
-
- 显示数据到显示器上,从键盘输入数据
-
- 把数据写到硬盘上,从硬盘上读数据
-
- 把数据写到网卡里,从网卡读数据。
B+ 树的优势:
在MySQL中组织数据的方式:
当年看到一张“表”的时候,实际上这个表不一定是按照“表格”这样的数据结构在硬盘上组织的,也有可能是按照这种树(B+树)形式组织(具体是哪种结构,取决于你的表里有没有索引,一级数据库使用了哪种索引~)
在一个表中:如果id是表的主键,若表里有多个索引呢??(id,name两个索引)表的数据还是按照id为主键,构建出B+树,通过叶子节点组织所有的数据行……,其次,针对name这一列会创建另外一个B+树,但是这个B+树的叶子节点就不再存储这一行的完整数据,而是存储主键id!!!此时,如果你根据name来查询,查到叶子节点得到的只是主键id,还需要通过主键id去主键的B+树里面在查找一次(一共查找两次B+树)(上述的过程称为“回表”,这个过程是MySQL自动完成的,用户感知不到~)