【20】C++岗位求职面试八股文第二十篇(数据库)
系列文章目录
第一篇:语言基础
第二篇:设计模式
第三篇:数据库
第四篇:计算机网络
第五篇:操作系统
第六篇:LInux
第七篇:数据结构
第八篇:智力题
[61]数据库索引失效了怎么办?
索引失效的情况:
可以采用以下几种方式,来避免索引失效:1使用组合索引时,需要遵循“最左前缀”原则;2不在索引列上做任何操作,例如计算、函数、类型转换,会导致索引失效而转向全表扫描;3.尽量使用覆盖索引,减少 select *, 覆盖索引能减少回表次数;4.MySQL在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描;5.LIKE以通配符开头(%abc)MySQL索引会失效变成全表扫描的操作;6.字符串不加单引号会导致索引失效(可能发生了索引列的隐式转换);7or某一边的字段无索引,用它来连接时会索引失效。
主键和唯一键会自动设置索引
[62]所有的字段都适合创建索引吗?
不是下列几种情况,是不适合创建索引的:1.频繁更新的字段不适合建立索引;2where条件中用不到的字段不适合建立索引;3数据比较少的表不需要建索引;4数据重复且分布比较均匀的的字段不适合建索引,例如性别、真假值;5参与列计算的列不适合建索引。
[63]MySQL抖⼀下
原因:InnoDB 会在后台刷脏⻚,⽽刷脏⻚的过程是要将 内存⻚写⼊磁盘。这个过程影响了正在的操作。含义:花费更多的资源处理别的事情,SQL语句的执⾏效率明显变慢,系统不稳定,性能突然下降解决:设置合理参数配配置,尤其是设置 好innodb_io_capacity 的值,并且平时要多关注脏⻚⽐ 例,不要让它经常接近 75%
[64]为啥删除了表的⼀半数据,表⽂⽂件⼤⼩没变化?
delete 命令其实只是把记录的位置,或者数据⻚标记为了“可复⽤”,但磁盘⽂件的⼤⼩是 不会变的,以物理空间没有实际释放。表的结构信息:.frm表的数据信息:.ibd
[65]脏⻚?干净页
脏页:当内存数据⻚跟磁盘数据⻚内容不⼀致干净页:内存数据写⼊到磁盘后,内存和磁盘上的数据⻚的内容就⼀致
[66]空洞
空洞就是那些被标记可复⽤但是还没被使⽤的存储空间。使⽤delete命令删除数据会产⽣空洞,标记为可复⽤插⼊新的数据可能引起⻚分裂,也可能产⽣空洞修改操作,有时是⼀种先删后插的动作也可能产⽣空
[67]Count
按照效率排序的话: count(字段) < count(主键 id) < count(1) ≈ count(*)count() 是⼀个聚合函数,对于返回的结果集,⼀⾏⾏地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加,最后返回累计值
[68]数据库-单表1千万数据,未来1年还会增⻓多500万,性能⽐较慢,说下你的优化思路
结论:在数据及访问压⼒不是特别⼤的情况,⾸先考虑缓存、读写分离、索引技术等⽅案, 如果数据极⼤,且业务持续增⻓快,再考虑分库分表⽅案
[69]MySQL数据库分库分表后带来的优点
分库分表的优点:可以解决数据库本身的瓶颈以及系统本身的瓶颈数据库分表可以解决单表海量数据的查询性能问题数据库分库可以解决单台数据库的并发访问压⼒问题分库分表的缺点:跨库查询、分布式事务、分库之后的排序(翻⻚,函数的计算问题)、全局主键问题(自增问题、容ᰁ量规划(⼆次扩容问题)、技术选型问题
[70]char 和 varchar 的区别
char 是固定⻓度类型,⽐如:定义 char(10),当你输⼊”abc”三个字符的时候,它们占的空间 还是 10 个字节,其他 7 个是空字节。Varchar(M) ⻓度可变,M代表该数据类型所允许保存的字符串的最大长度
[71]说一说索引的实现原理
InnoDB也使用B+Tree作为索引结构InnoDB的数据文件本身就是索引文件;MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址
[72]数据库索引的重构过程
1什么时候需要重建索引呢?表上频繁发生update,delete操作;表上发生了alter table ..move操作(move操作导致了rowid变化)。
2怎么判断索引是否应该重建?
- 一般看索引是否倾斜的严重,是否浪费了空间,对索引进行结构分析:analyze index index_name validate structure;
- 在相同的session中查询index_stats表:select height,DEL_LF_ROWS/LF_ROWS from index_stats;当查询的height>=4(索引的深度,即从根到叶节点的高度)或DEL_LF_ROWS/LF_ROWS>0.2的情况下,就应该考虑重建该索引。
3.如何重建索引?drop原索引,然后再创建索引:这种方式相当耗时,一般不建议使用。直接重建索引:此方法较快,建议使用。alter index indexname rebuild;alter index indexname rebuild online;Rebuild会阻塞DML操作,rebuild online不会阻塞DML操作;
4.重建索引过程中的注意事项:执行rebuild操作时,需要检查表空间是否足够;虽然说rebuild online操作允许DML操作,但还是建议在业务不繁忙时间段进行;Rebuild操作会产生大量Redo Log;
[73]MySQL的索引为什么用B+树?
B+树由B树和索引顺序访问方法演化而来,它是为磁盘或其他直接存取辅助设备设计的一种平衡查找树,在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶子节点,各叶子节点通过指针进行链接。如下图:
[74]联合索引的存储结构是什么,它的有效方式是什么?
联合索引还是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2,使用联合索引时遵循最左前缀集合。
[75] MySQL的Hash索引和B树索引有什么区别?
hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据。B+树底层实现是多路平衡查找树,对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据。它们有以下的不同:• hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询。因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询。而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围。• hash索引不支持使用索引进行排序,原理同上。• hash索引不支持模糊查询以及多列索引的最左前缀匹配,原理也是因为hash函数的不可预测。• hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚簇索引,覆盖索引等)的时候可以只通过索引完成查询。• hash索引虽然在等值查询上较快,但是不稳定,性能不可预测,当某个键值存在大量重复的时候,发生hash碰撞,此时效率可能极差。而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低。
因此,在大多数情况下,直接选择B+树索引可以获得稳定且较好的查询速度。而不需要使用hash索引。
[76]聚簇索引和非聚簇索引有什么区别
在InnoDB存储引擎中,可以将B+树索引分为聚簇索引和辅助索引(非聚簇索引)。无论是何种索引,每个页的大小都为16KB,且不能更改。
聚簇索引是根据主键创建的一棵B+树,聚簇索引的叶子节点存放了表中的所有记录(索引+数据)表记录的排列顺序和索引的排列顺序⼀致,所以查询效率快辅助索引是根据索引键创建的一棵B+树,辅助索引不包含行记录的所有数据,其叶子节点仅存放索引、主键。表记录的排列顺序和索引的排列顺序不⼀致使⽤⾮聚集索引查询数据时,需要拿到叶⼦上的主键再去表中查到想要查找的数据。 这个过程就是我们所说的回表
覆盖索引:当⼀个索引包含(或者说是覆盖)需要查询的所有字段的值时,就是把要查询出的列和索引是 对应的,不做回表操作! 索引包含所要查询的所有字段
覆盖索引一般针对的是辅助索引,整个査询结果只通过辅助索引就能拿到结果,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值。
[77]union /union all 的区别 去重+排序
[78]select in语句中如何使用索引?
索引是否起作用,主要取决于字段类型:
如果字段类型为字符串,需要给in查询中的数值与字符串值都需要添加引号,索引才能起作用。
如果字段类型为int,则in查询中的值不需要添加引号,索引也会起作用。IN的字段,在联合索引中,按以上方法,也会起作用。
[79]如何避免长事务对业务的影响
[80]模糊查询语句中如何使用索引?
在MySQL中模糊查询 mobile like ‘%8765’,这种情况是不能使用 mobile 上的索引的。mobile为17****5678,那么 mobile_reverse 存储 87654321371,为 mobile_reverse 列建立索引,查询中使用语句 mobile_reverse like reverse(‘’8765%’) 即可。
[续]C++岗位求职面试八股文第二十一篇(数据库)
更多关于算法题解、软件开发面经、机器学习算法面经、各企业面试问题记录,关注Fintech砖,持续更新中。https://www.nowcoder.com/users/873777317
企业面试记录专栏https://www.nowcoder.com/creation/manager/columnDetail/0YBWnm
机器学习面经专栏https://www.nowcoder.com/creation/manager/columnDetail/j8nNy0
软件开发面经专栏https://www.nowcoder.com/creation/manager/columnDetail/0aXKaM
更多校园招聘常见面试问题(开发、算法、编程题目)参见CSDN博客:http://t.csdn.cn/V4qbH
欢迎关注、收藏、点赞后进行问题咨询及秋招建议
#晒一晒我的offer##牛客在线求职答疑中心##牛客解忧铺##我的实习求职记录##实习,投递多份简历没人回复怎么办#包含C++、操作系统、数据库、计算机组成、计算机网络、设计模式、操作系统、牛客网服务器项目、综合智力题等