MySql索引相关知识点

1.Innodb 支持的B+树索引是自动设置的,不能人为干预

2.mysql使用explain分析查询语句的性能,用到的索引。

3.辅助索引也叫二级索引,通过查询主键id来实现回表操作,到主键索引查询
辅助索引的B+树非叶子节点中存储的是索引列值+页号,叶子节点存储的是索引列值+主键值
innodb在移动行数据的时候,无需维护二级索引,因为二级索引存储的是主键值,而不是指向主键的指针

聚簇索引最底层(0层)页内是单向链表,不同的页之间使用双向链表

4.mysql使用联合索引的最左匹配原则:
innodb使用到的所有索引都是B+树,创建联合索引的时候,是局部有序的
例如:联合索引为(a,b,c),从整个索引角度来看,a是有序的,b,c是无序的,当a相同的时候,b是局部有序的
c是无序的,当b相同的时候(此时a必然相同),c是有序的
因此,当使用了>,<,%等时候,例如a=1,b>2,c=3,此时a是可以用索引查到的,b查到的可能有很多值,这些值对应的c是无序的
联合索引只会创建一个B+树,和单独使用多个索引是不一样的

5.index merge:where 中可能有多个条件(或者join)涉及到多个字段,它们之间进行 AND 或者 OR,那么此时就有可能会使用到 index merge 技术,union, intersection, 以及它们的组合(先内部intersect然后在外面union)
intersect:取交集,多个where条件是and,或者范围查询>,以及二者的组合
union:多个where后的条件的结果取并集,适用于查询条件均为索引且使用or连接

6.为什么要使用递增的字段作为主键呢:(没有指定主键会使用一个隐含的ROW id作为默认主键)
把递增字段作为主键的时候,每次插入新的数据都是在现有叶子节点的最后顺序插入,
如果页面大小达到装默认的装载因子(15/16),会开辟新的一页
如果使用的不是自增字段,那么插入新数据的时候会频繁移动之前插入好的数据,严重影响性能。

7.sql语句执行过程:
mysql基础构成:
连接器:连接器主要和身份认证和权限相关的功能,
分析器:提取关键字,分析是否符合语法要求
优化器:用它认为的最优的执行方案去执行(可能不是真正最优),此时真正的sql语句执行过程才确定下来
执行器:调用引擎接口,返回执行结果

更新语句执行过程:修改内存中读取到的数据,记录redo_log,redo_log变成prepared状态,告诉执行器,
                               然后执行器记录bin log,再调用引擎接口将redo log变成提交状态。

8.explain参数解析:

id:select:操作的id,id相同按顺序执行,id不同从大到小执行
select_type:查询的类型,简单或者复杂,包括,simple,subquery,primary(子查询最外层),                                   derived(子查询生成的临时表)
table:用到的表
type:包含all(全表扫描),const(一次索引找到),range(范围查询),index(遍历索引树)
key:实际用到的索引
rows:估算需要读取的行数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值