DW/BI 数据库面试题
一、 基础题
1. 简单描述Table/Extent/Segment/Block之间的关系.
table创建时,默认创建了一个data segment,
每个data segment含有min extents指定的extents数,
每个extent据据表空间的存储参数分配一定数量的blocks
 
2. 描述Tablespace和Datafile之间的关系.
多表查询sql语句面试题一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内,
table中的数据,通过hash算法分布在tablespace中的各个datafile中,
tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。
 
3. 描述日志的作用.
记录数据库事务,最大限度地保证数据的一致性与安全性
重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件
归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
 
4. 请列举几种表连接的内部算法(非Inner、left、Right、Join).
Nest loop, hash join 常用的2种吧。。前者是大小表,小小表关联,后者是大表 join 大表。。
Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全)
Or hash join/merge join/nest loop(cluster join)/index join
 
5. SQL调整最关注的是什么.
查看该SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))
 
6. 描述对索引的认识(索引的结构、对DML的影响、为什么提高了查询性能).
索引是与表和聚类相关的可选结构。你可以创建,也可以不创建。可以在一个表的一个或多个列上创建索引,以加速 SQL 语句在该表上的执行。索引比没有索引能更快地定位信息,Oracle 数据库对表数据提供更快的访问路径。正确使用索引是减少磁盘 IO 的重要手段。
b-tree index/bitmap index/function index/patitional index(local/global) 索引通常能提高select/update/delete的性能,会降低insert的速度
关于Oracle索引结构,请参考如下: 关于 Oracle 索引以及 Bitmap 索引 和 B-tree 索引(归档)
关于SQLSERVER索引结构,存储数据的方式 请参考 SQLSERVER底层存储和性能优化总结分享 【数据后台存放在页面面,但是他的排列顺序不像我们select 是有顺序的。。数据库存储页比较凌乱,杂乱无章。,这个page用满了,在存放另外一个列的数据。不创建任何索引,就很杂乱,相当于一堆数据。。 】
 
7. 绑定变量是什么?绑定变量有什么优缺点?
绑定变量就是将变量的数据通过一定的数据访问技术来和相应的实体捆绑在一起,使之成为一个整体。是数据绑定的一种形式,也是变量访问的一种方法。
绑定变量可以减少SQL分析,节约共享池的空间。但是在某些情况下,使用绑定变量也是有缺点的。比如说,如果使用绑定变量,那么优化器就会忽略直方图的信息,在生成执行计划的时候可能不够优化。
 
8. 比较TRUNCATE和DELETE命令.
两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间. Delte 删除的时候记录日志,而truncate 不记录日志。
 
9. FACT  Table上需要建立何种索引?
位图索引 适合位图索引的字段(重复率高的、常用于AND、IN、OR等)如 时间、非唯一型的键
 
10. 什么是SCD?请列举SCD的种类与区别.
方式一:直接用最新值,覆盖就有值。等于是忽略了历史的变化。拿上面销售人员的例子来说,销售员甲2013年3月以前的业绩,也会归入到销售二部。
方式二:记录历史,以有效期起和止来标示当前有效。这样的情况下,需要结合代理键,因为一个维度成员,会有若干行记录,这种情况下,表结构可以类似于:
KEY, CODE, NAME, 有效期起, 有效期止, 当前有效?
这种情况下,可以将上例中销售员甲的转部门前的业绩归入到其当时归属的部门。
方式三:记录当前和最近几次的历史,这种处理方式实际上很少使用。
另外,还会有一些非主流的处理方式,譬如不覆盖,或者说1、2、3方式结合,成为TYPE 6的,等等。
实际的处理,需要理论结合实际,实际,指的是客户的需求和工具的支持度。
客户如果能接受覆盖,这是最容易处理的方式。
否则,就要调研关注变化的属性。
ETL工具中,有些可以支持从源系统表生成TYPE 2的组件,但是用起来好像也不是太好用。
 
二、 SQL试题
1. 有一张表T(F1,F2,F3,F4),要根据字段F2排序后取第8-16条记录显示,请写出SQL。
对应的SQL如下:
with cte as
(
select ROW_NUMBER()over(order by F2) as RN,* from T
)
select * from cte where RN between 8 and 16
或者
select top 8 * from T where F2 not in (select top 8 F2 from T order by F2)
 
2. 指出下面SQL语句的执行顺序:
lumn1 , COUNT(*) AS CountValue, lumn3) AS SumValue from TableAainner joinTableB b lumn1 = b.column1 lumn2 = 1  lumn3 = 10 group lumn1 having COUNT(*)> 10 order lumn1
1.        From                          2.        ON                           
3.        INNER  JOIN                    4.        WHERE                             
5.        GROUP BY                      6.        having                             
7.          SELECT                        8.        ORDER BY                         

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。