admin管理员组文章数量:1794759
MySQL/Redis 常见面试题汇总
1、常见数据库引擎和区别
Innodb 支持行锁/表锁,支持事物,支持外键,不支持全文索引 【很多企业默认使用Innodb】
MyIsam 不支持行锁/支持表锁,不支持外键,不支持事物 ,支持全文索引
2、MySQL事务及其特性原子性(Atomicity): 一个事物所有操作全部完成或失败
一致性(Consistency): 事务开始和结束之后完整性没有被破坏
隔离性(Isolation): 允许多个事物同时对数据库修改和读写
永久性(Durablity): 事物提交之后,修改之后是永久不丢失的
3、MySQL索引的种类 3.1 按照数据结构/物理存储/字段特性/字段个数 进行索引分类按数据结构分类可分为:B+tree索引、Hash索引、Full-text索引。 按物理存储分类可分为:聚簇索引、二级索引(辅助索引)。 按字段特性分类可分为:主键索引、普通索引、前缀索引。 按字段个数分类可分为:单列索引、联合索引(复合索引、组合索引)
MySQL索引有哪些分类,你真的清楚吗? - SegmentFault 思否
3.2 字段类型分类可以分为主键索引和非主键索引总体划分为两类,主键索引也被称为聚簇索引(clustered index),其余都称呼为非主键索引也被称为二级索引(secondary index)。
主键索引存储了整行数据,而非主键索引中存储的值为主键id,当查询的值在非主键索引树里面找不到的时候就会触发回表操作。
4、BTree 和 B+Tree的区别BTree结构
B+Tree结构
5、什么是回表当在一个索引树查询不到完整数据的情况,需要再次查找其他索引树的情况称为回表
什么时候会使用回表操作,当使用的是非主键索引的时候,就会进行会表操作操作
如何避免回表操作:使用覆盖索引
6、如何实现覆盖索引只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表
将被查询的字段,建立到联合索引里去。
MySQL 覆盖索引详解 - 掘金
7、列举创建索引但是无法命中的情况?使用or
聚合索引没有遵循最左匹配
like 查询 %再在前面
在查询的字段选择函数计算
使用 != , <>
一张图搞懂MySQL的索引失效 - SegmentFault 思否
8、1000W条数据,使用limit offset分页时,为什么越往后翻越慢?limit offset 执行过程是读取n行数据然后抛弃前面的数据,这样数据量大速度就会变慢,所以需要通过引入主键索引 或者 给需要查询的字段增加索引
这句 SQL 的执行逻辑是
- 1.从数据表中读取第N条数据添加到数据集中
- 2.重复第一步直到 N = 10000 + 10
- 3.根据 offset 抛弃前面 10000 条数
- 4.返回剩余的 10 条数据
百万级表Limit翻页越往后越慢咋办? - 云+社区 - 腾讯云
9、SQL注入的攻击原理及如何在代码层面防止SQL注入SQL注入的攻击原理就是通过拼接SQL语句绕过代码逻辑,达到攻击的目的
如何防止:不直接拼接SQL,适用预编译SQL,需要用户传入的字段进行类型判断然后再传入SQL模板
10、实现Redis分布式锁过程先通过setnx设置锁,拿到锁的进程执行,没有拿到的等待,执行完之后通过del 删除锁,然后其他进程继续获得锁,通过设置过期时间来保证出现进程意外crash不释放锁的情况
基于Python实现Redis 分布式锁_李俊的博客的博客-CSDN博客_python redis分布式锁
版权声明:本文标题:MySQLRedis 常见面试题汇总 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686565547a82555.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论