不同的表可以有不同的存储引擎。
查看表的引擎:
默认是
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的索引。当要处理长的字符串时,建这个前缀索引可以提高查找速率。
前缀索引:先看看前缀是否符合,再检查剩下部分
单列索引和联合索引:
总结:尽量使用联合索引而不用单列索引,联合索引效率最高,若能使用覆盖索引,可以避免回表查询。单列索引会使用回表查询,效率会降低。
建立联合索引,应该注重字段的顺序,否则会影响效率。
索引的设计原则:
尽量使用哪些每个用户不同的字段来建立索引
索引并不是越多越好,会影响增删效率
好的,关于索引的内容就分享到这了。