MySQL进阶之存储引擎和索引

 

不同的表可以有不同的存储引擎。

查看表的引擎:

 默认是

 

INNODB存储引擎:

 

可以通过在对应路径上cmd的终端上输入相当应的命令,看到这张表中的信息。

Innodb的内部细分结构:

 

三种存储引擎的区别: 

 

索引:本质是一种高效获取数据的数据结构

 索引分类:

后面主要分享B+Tree索引和哈希索引。

 B+Tree索引对应的数据结构:

 

 B+Tree特点:所有结点都在叶子结点,上面的结点只是起到引导的作用,并没有存储数据。

 

进一步优化:

 哈希索引:

 

 思考题:

 索引的分类:

 

注意聚集索引和二级索引下面的区别

名字是按照字母来排序的 

 

找到Arm对应的10,再到上面找10对应的位置 ,中间有个叫回表查询的步骤

索引的语句:

案例:注意四种索引的写法

索引的性能分析:

 慢查询:慢查询的语句要进行优化

 可以通过这个操作来查询慢查询是否打开。

show profiles可以查询我们刚才所有指令的耗时时间

 

 要先用这个命令行查看是否当前数据库支持have_profiing操作

 

 为0表示当前是没有支持profiling这个操作

再设置为1,表示打开 

 上面两个操作开启后,就可以很方便的查看到刚刚执行的全部命令行的查询时间啦。用show profiles命令。

 

更详细的信息:要用到explain或desc(只需加在命令行前面即可,现实中用explain会比较多)

 多表查询时的explain

 

id值越大,越先执行,id值相同,从上到下执行。subquary2表示第二个子查询。

重点关注type,看出SQL语句的性能指标,关注possible_key,key

在命令行最后加上\G,表中信息可以切换为每行,方便查看

 

最左前缀法则并不是一定要出现在最左边。这里的左边。边指的是建索引时候索引的顺序,如index_pro_age_sta,并不是体现在SQL语句中左边。

范围查询时,右边的列将会失效。

尽量使用>=这样的符号而不是>.

索引失效情况:

  

一定要避免模糊索引。explain结果中key_len为数字表示走索引,NULL表示没走索引

在单列索引和联合索引同时具备存在时,优先使用联合索引。

 注意不要用该索引和强制用该索引的区别

覆盖索引相比较于联合索引有时候可以减少回表查询这个步骤。

前缀索引

 

 该语句表示查找email不重复的值。

 从1开始substring截取10个元素。

前缀索引:

建立一个前缀5的索引。当要处理长的字符串时,建这个前缀索引可以提高查找速率。 

 前缀索引:先看看前缀是否符合,再检查剩下部分

单列索引和联合索引:

 总结:尽量使用联合索引而不用单列索引,联合索引效率最高,若能使用覆盖索引,可以避免回表查询。单列索引会使用回表查询,效率会降低。

建立联合索引,应该注重字段的顺序,否则会影响效率。 

索引的设计原则:

尽量使用哪些每个用户不同的字段来建立索引

索引并不是越多越好,会影响增删效率

 好的,关于索引的内容就分享到这了。


版权声明:本文为m0_63932570原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。