mysql面试题

1.四种事务隔离级别

原文链接,点我过去

2.索引失效场景

2.1.联合索引不满足最左匹配原则

如果是a,b,c三列联合索引,条件是a=123 and b> 34 and c = ‘oo’ ,a和b会用到索引,c不会用到

2.2.使用了select *

如果条件不满足使用索引,但是查询结果都是索引字段,会走覆盖索引,在不能用索引的时候可以趋近使用覆盖索引

2.3.索引列参与运算

2.4.索引列参使用了函数

2.5.错误的Like使用(不是使用like就不使用索引)

模糊查询时(like语句),模糊匹配的占位符位于条件的首部。

2.6.类型隐式转换

'1022’写成1022

2.7.使用OR操作

查询条件使用or关键字,其中一个字段没有创建索引,则会导致整个查询语句索引失效; or两边为“>”和“<”范围查询时,索引失效。

2.8 两列做比较

两列数据做比较,即便两列都创建了索引,索引也会失效。

2.9 不等于比较

查询条件使用不等进行比较时,需要慎重,普通索引会查询结果集占比较大时索引会失效。

2.10 is not null

查询条件使用is null时正常走索引,使用is not null时,不走索引。

2.11 not in和not exists

查询条件使用not in时,如果是主键则走索引,如果是普通索引,则索引失效。

2.12 order by导致索引失效

当查询条件涉及到order by、limit等条件时,是否走索引情况比较复杂,而且与Mysql版本有关,通常普通索引,如果未使用limit,则不会走索引。order by多个索引字段时,可能不会走索引。其他情况,建议在使用时进行expain验证。

2.13 参数不同导致索引失效

当查询条件为大于等于、in等范围查询时,根据查询结果占全表数据比例的不同,优化器有可能会放弃索引,进行全表扫描。

2.14 其他

Mysql优化器的其他优化策略,比如优化器认为在某些情况下,全表扫描比走索引快,则它就会放弃索引。
原文链接,点我过去

3.b树和b+树

树本身是一样的 ,但是b+树是叶子节点存储数据,b树是所有节点,b+树的所有叶子节点是相连的,不需要去上游节点查找。

3.1 为什么选择b+树

B+树的查询性能更好,因为数据都存储在叶子节点中,查询时只需要遍历一次叶子节点即可得到查询结果。
B+树的叶子节点之间通过指针连接起来,形成一个有序链表,方便范围查询和排序操作。
B+树的非叶子节点中只包含索引,因此占用的空间更小,可以存储更多的索引信息。

4.单表两千万问题

因为修改的问题,查询的性能会多一层还好,但是修改是对整个树增加锁,导致比较慢。B-Link Tree针对锁采用逐层加锁的方式。同时他的每一层都用可以直接访问的就和b+树的叶子节点一样比较快。

5.聚集索引和非聚集索引

什么是聚簇索引?

很简单记住一句话:找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,所以主键就是聚簇索引,修改聚簇索引其实就是修改主键。

什么是非聚簇索引?

索引的存储和数据的存储是分离的,也就是说找到了索引但没找到数据,需要根据索引上的值(主键)再次回表查询,非聚簇索引也叫做辅助索引。

覆盖索引

如果查询的列都是索引列,就会走覆盖索引

6.锁

按照锁的使用方式,MySQL锁可以分成共享锁、排它锁两种;
根据加锁的范围,MySQL锁大致可以分成全局锁、表级锁和行锁三类;
从思想层面上看,MySQL锁可以分为悲观锁、乐观锁两种;

原文链接: link

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值