

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

默认是

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

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

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

建立联合索引,应该注重字段的顺序,否则会影响效率。
索引的设计原则:
尽量使用哪些每个用户不同的字段来建立索引
索引并不是越多越好,会影响增删效率

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