写在前面
1.Mysql索引在什么情况下会失效
2.MySql的存储引擎InnoDB与MyISAM的区别
3.Mysql在项目中的优化场景,慢查询解决等
4.Mysql有什么索引,索引模型是什么
5.B-树与B+树的区别?为什么不用红黑树
6.Mysql主从同步怎么做
7.乐观锁与悲观锁的区别?
8.聊聊binlog日志
9.redis 持久化有哪几种方式,怎么选?
10.redis 主从同步是怎样的过程?
11.redis 的 zset 怎么实现的?
12.Redis 过期策略和内存淘汰策略
1.Mysql索引在什么情况下会失效
-
查询条件包含
or
,可能导致索引失效 -
如果字段类型是字符串,
where
时一定用引号括起来,否则索引失效 -
like
通配符可能导致索引失效。 -
联合索引,查询时的条件列不是联合索引中的第一个列,索引失效。
-
在索引列上使用mysql的内置函数,索引失效。
-
对索引列运算(如,+、-、*、/),索引失效。
-
索引字段上使用(!= 或者 < >,not in)时,可能会导致索引失效。
-
索引字段上使用
is null, is not null
,可能导致索引失效。 -
左连接查询或者右连接查询查询关联的字段编码格式不一样,可能导致索引失效。
-
mysql 估计使用全表扫描要比使用索引快,则不使用索引。
2.MySql的存储引擎InnoDB与MyISAM的区别
InnoDB支持事务、外键、行级锁。
3.Mysql在项目中的优化场景,慢查询解决等
加索引。你可以给面试官描述一下,一个加了索引的SQL,是怎么执行查找的。
还有就是order by,group by原理,深分页等等,都跟慢查询息息相关,都比较经典:
最后就是慢查询的排查解决手段:
打开慢查询日志slow_query_log
,确认SQL语句是否占用过多资源,用explain
查询执行计划、对group by、order by、join
等语句优化,如果数据量实在太大,是否考虑分库分表等等。
4.Mysql有什么索引,索引模型是什么
5.B-树与B+树的区别?为什么不用红黑树
🍒为什么索引结构默认使用B+树,而不是B-Tree,Hash哈希,二叉树,红黑树?
-
Hash哈希,只适合等值查询,不适合范围查询。
-
一般二叉树,可能会特殊化为一个链表,相当于全表扫描。
-
红黑树,是一种特化的平衡二叉树,MySQL 数据量很大的时候,索引的体积也会很大,内存放不下的而从磁盘读取,树的层次太高的话,读取磁盘的次数就多了。
-
B-Tree
,叶子节点和非叶子节点都保存数据,相同的数据量&#