MySQL进阶之存储引擎和索引

本文深入探讨了数据库存储引擎,特别是INNODB的特点,并详细解析了B+Tree和哈希索引的区别。强调了索引分类中的聚集索引和二级索引,以及如何通过EXPLAIN分析SQL语句的性能。分享了如何避免索引失效,提倡使用联合索引以提高查询效率,并提出了索引设计的原则和注意事项。
摘要由CSDN通过智能技术生成

 

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

查看表的引擎:

 默认是

 

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的索引。当要处理长的字符串时,建这个前缀索引可以提高查找速率。 

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

单列索引和联合索引:

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

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

索引的设计原则:

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值