必须掌握的数据库面试题有哪些

54次阅读
没有评论

共计 2758 个字符,预计需要花费 7 分钟才能阅读完成。

本篇内容介绍了“必须掌握的数据库面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、为什么使用数据索引能提高效率

数据索引的存储是 有序的

在有序的情况下, 通过索引查询一个数据是无需遍历索引记录的

极端情况下,数据索引的查询效率为二分法查询效率, 趋近于 log2(N)

二、B+ 树索引和哈希索引的区别

B+ 树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过 1, 而且同层级的节点间有指针相互链接,是有序的,如下图:

哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似 B + 树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可, 是无序的,如下图所示:

三、哈希索引的优势:

等值查询,哈希索引具有绝对优势 (前提是: 没有大量重复键值,如果大量重复键值时,哈希索引的效率很低,因为存在所谓的哈希碰撞问题。

四、哈希索引不适用的场景:

不支持 范围查询

不支持索引完成排序

不支持联合索引的最左前缀匹配规则

五、什么是表分区?

表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成

六、表分区与分表的区别?

分表:指的是通过一定规则,将一张表分解成多 张不同的表。比如将用户订单记录根据时间成多个表。

分表与分区的区别在于: 分区从逻辑上来讲只有一张表 , 而分表则是将一张表分解成多张表。

七、表分区有什么好处?

鸿蒙官方战略合作共建——HarmonyOS 技术社区

存储更多数据。分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备。和单个磁盘或者文件系统相比,可以存储更多数据

优化 E 询。在 where 语句中包含分区条件时,可以只扫描一个或多   个分区表来提高查询效率; 涉及 sum 和 count 语句时,也可以在多个分区上并行处理,最后汇总结果。

分区表更容易维护。例如: 想批量删除大量数据可以清除整个分区。

避免某些特殊的瓶颈,例如 InnoDB 的单个索引的互斥访问,ext3 问价你系统的 inode 锁竞争等。

八、在 MVCC 并发控制中, 读操作可以分成两类:

快照读 (snapshot read): 读取的是记录的可见版本 (有可能是历史版本),不用加锁 (共享读锁 s 锁也不加,所以不会阻塞其他事务的写)

当前读 (currentread): 读取的是记录的最新版本,并且,当前读返回的记录,都会加上锁,保证其他事务不会再并发修改这条记录

九、行级锁定的优点:

鸿蒙官方战略合作共建——HarmonyOS 技术社区

当在许多线程中访问不同的行时只存在少量锁定冲突。

回滚时只有少量的更改

可以长时间锁定单一的行。

十、行级锁定的缺点:

比页级或表级锁定占用更多的内存。当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁。如果你在大部分数据上经常进行 GROUP  BY 操作或者必须经常扫描整个表,比其它锁定明显慢很多。用高级别锁定,通过支持不同的类型锁定, 你也可以很容易地调节应用程序,因为其锁成本小于行级锁定。

十一、MySQL 优化

开启查询缓存,优化查询

explain 你的 select 查询,这可以帮你分析你的查询语句或是表结构的性能瓶颈。EXPLAIN 的查询结果还会告诉你你的索引   主键被如何利用的,你的数据表是如何被搜索和排序的

当只要一行数据时使用 limit 1, MySQL 数据库引擎会在找到一条数据后停止搜索, 而不是继续往后查少下一条符合记录的数据

为搜索字段建索引

使用 ENUM 而不是 VARCHAR

Prepared StatementsPrepared Statements 很像存储过程, 是一种运行在后台的 SQL 语句集合, 我们可以从使用

prepared statements 获得很多好处,无论是性能问题还是安全问题。

Prepared Statements 可以检查一些你绑定好的变量,这样可以保护你的程序不会受到“SQL 注入式”攻击

垂直分表

选择正确的存储引擎

十二、key 和 index 的区别

key 是数据库的物理结构,它包含两层意义和作用,一是约束 (偏 重于约束和规范数据库的结构完整性) , 二是索引 (辅助查询 用的)。包括 primary  key, unique key, foreign key 等

index 是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间 (mysql 中的 innodb 表空间) 以 - 个类似目录的结   构存储。索引要分类的话,分为前缀索引、全文本索引等;

十三、Mysql 中 MyISAM 和 InnoDB 的区别有哪些?

鸿蒙官方战略合作共建——HarmonyOS 技术社区

InnoDB 支持事务, MyISAM 不支持

InnoDB 支持外键,而 MylSAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;

InnoDB 是聚集索引,数据文件是和索引绑在一起,必须要有主键,通过主键索引效率高。

InnoDB 不保存 表的具体行数, 执行 select count(*) from table 时需要全表扫描。

Innodb 不支持全文索引,而 MyISAM 支持全文索引, 查询效率上 MyISAM 要高;

十四、数据库表创建注意事项

1、字段名及字段配制合理性

剔除关系不密切的字段; 1 字段命名要有规则及相对应的含义 (不要一部分英文,一部分拼音,还有类似 a.b.c 这样不明含义的字段) ;

字段命名尽量不要使用缩写 (大多数缩写都不能明确字段含义) ;

字段不要大小写混用 (想要具有可读性,多个英文单词可使用下划线形式连接) ;

字段名 不要使用保留字或者关键字;

保持字段名和类型的一致性;

慎重选择数字类型; 给文本字段留足余量;

2、系统特殊字段处理及建成后建议

添加删除标记 (例如操作人、删除时间) ;

建立版本机制;

3、表结构合理性配置

多型字段的处理,就是表中是否存在字段能够分解成更小独立的几部分 (例如: 人可以分为男人和女人) ;

多值字段的处理,可以将表分为三张表,这样使得检索和排序更加有调理,且保证数据的完整性!

4、其它建议

对于大数据字段,独立表进行存储, 以便影响性能 (例如: 简介字段) ;

使用 varchar 类 型代替 char, 因为 varchar 会动态分配长度,char 指定长度是固定的;   给表创建主键,对于没有主键的表,在查询和索引定义上有一定的影响;

避免表字段运行为 null, 建议设置默认值 (例如: int 类型设置默认值为 0) 在索引查询上,效率立显;  1 建立索引, 最好建立在唯 - 和非空的字段上,建立太多的索引对后期插入、更新都存在一定的影响 (考虑实际情况来创建) ; 

“必须掌握的数据库面试题有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计2758字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)