数据库工程师常见面试题
数据库工程师常见面试题
问题 1:为什么 group by 和 order by 会使查询变慢?
答:group by 和 order by 操作通常需要创建一个临时表来处理查询的结果,
所以如果查询结果很多的 话会严重影响性能。
问题 2:delete、truncate 和 drop 的区别?
答:Delete 命令用来删除表的全部或者一部分数据行,执行 delete 之后,用
户需要提交(commmit) 或者 回滚(rollback) transaction 来执行删除或者撤销删
除,delete 命令会触发这个表上所有的 delete 触发器。
Truncate 删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,
truncate 比 delete
更快,占用的空间更小。
Drop 命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所
有的 DML 触发器也不会被 触发,这个命令也不能回滚。
问题 3:简述数据库的设计过程。
答:数据库设计分为以下五个阶段: 需求分析:主要是准确收集用户信息需
求和处理需求,并对收集的结果进行整理和分析,形成需求说
明。
概念结构设计:对用户需求进行综合、归纳、抽象,形成一个与与具体的
DBMS 无关概念模型(一般 为 ER 模型)。
逻辑结构设计:将概念结构设计的概念模型转化为某个特定的 DBMS 所支
持的数据模型,建立数据库 逻辑模式,并对其进行优化,同时为各种用户和应
用设计外模式。
物理结构设计:为设计好的逻辑模型选择物理结构,包括存储结构和存取方
法等,建立数据库物理模 式。
实施和维护:实施就是使用 DLL 语言建立数据库模式,将实际数据载入数
据库,建立真正的数据库。 维护阶段是对运行中的数据库进行评价、调整和修
改。
问题 4:插入记录时可以不指定字段名称吗?
答:不管使用哪种 INSERT 语法,都必须给出 VALUES 的正确数目。如果
不提供字段名,则必须给 每个字段提供一个值,否则将产生一条错误消息。如
果要在 INSERT 操作中省略某些字段,这些字段需要 满足一定条件:该列定义
为允许空值;或者表定义时给出默认值,如果不给出值,将使用默认值。
问题 5:本地索引与全局索引的差别与适用情况。
答:对于本地索引,每一个表分区对应一个索引分区,当表的分区发生变化
时,索引的维护由数据库 自动进行。对于全局索引,可以选择是否分区,而且
评论