面试第一弹_数据库开发工程师_2019-03-11

       这是工作以来的第一次面试,虽然说是三个人的视频面试,说实话,心中有些紧张不安,仿佛回到了大学校招时期的面试,投递的岗位是Java研发,但是从一开始,技术面试官就阐明了,这是一次数据库开发面试,招聘的岗位也是一位数据库开发工程师,关键是技术面试官还笑眯眯的问是否接受这个岗位,该公司针对银行项目绩效系统,主要是做一些存储过程开发,sql查询,线上部署类的工作。心中一万句(gd),但还是同样笑着回应数据库开发我也接受这样的岗位,接下来就进入了正题,技术面试。

      老事常谈,先是自我介绍,说实话,自我介绍一开始按照我的想法是介绍任务信息、工作经历、技能。但被面试一开始的岗位信息打蒙了,简单地结束了这个环节。然后进行了技术提问。以下问题不分先后顺序,见谅。

1.了解数据库索引吗?为什么这么快?

创建索引可以大大提高系统的性能:
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
增加索引也有许多不利的方面:
第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

2.联合索引(两个字段)中只在where条件中使用一个字段是否触发索引?

  1. 使用联合索引的前面一个条件是会触发索引
  2. 两个条件一起使用也会触发索引,但是必须用and ,or不会触发索引
  3. 只用后面一个条件不会触发索引

3.假如遇到了一个sql查询很慢的问题,如何去优化?

查看表结构,考虑索引(是否未使用索引或索引使用不当)。

Sql语序是否不当。

4.什么是视图?

  1. 使用联合索引的前面一个条件是会触发索引
  2. 两个条件一起使用也会触发索引,但是必须用and ,or不会触发索引
  3. 只用后面一个条件不会触发索引

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

5.存储过程和函数的区别?

相同点:

1).创建语法结构相似,都可以携带多个传入参数和传出参数。

2).都是一次编译,多次执行。

不同点:

1).存储过程定义关键字用procedure,函数定义用function。

2).存储过程中不能用return返回值,但函数中可以,而且函数中必须有return子句。

3).执行方式略有不同,存储过程的执行方式有两种(1.使用execute2.使用begin和end),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(select f1() form dual;)。

总结:如果只有一个返回值,用存储函数,否则,一般用存储过程。

 

6.表分区的分类及使用?

  1. 范围分区
  2. 列表分区
  3. Hash分区:

1) HASH分区特点:
    HASH分区主要通过hash算法确定相应数据行应该被存放到哪个分区中。
    HASH分区比较适合列差异值很多的数据列。

2) 组合分区

组合分区的特点:
组合分区中,主要通过在不同列上,使用范围分区列表分区以及“HASH分区不同组合方式,进而实现组合分区。
组合分区中,分区本身没有相应的segment,可以认为是一个逻辑容器,只有子分区拥有实际的segment,用于存放数据。
组合分区的注意事项:
11g以前,组合分区主要有两种组合方式:“RANGE-HASH”以及“RANGE-LIST”
11g以后,组合分区新增了四种组合方式:“RANGE-RANGE”“LIST-RANGE”“LIST-HASH”以及“LIST-LIST”

7.数据库的三范式?

  1. 第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;
  2. 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;
  3. 第三范式(3NF):必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);

8.左外连接、右外连接、完全外连接使用?

左外连接:左表不加限制,保留左表的数据,匹配右表,右表没有匹配到的行中的列显示为null。

右外连接:右表不加限制,保留右表的数据。匹配左表,左表没有匹配到的行中列显示为null。

完全外连接:左右表都不加限制。即右外连接的结果为:左右表匹配的数据+左表没有匹配到的数据+右表没有匹配到的数据。

9.数据库中字段完全相同的记录如何去重,如何删除?

1)全部字段重复:select distinct * from tableName
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

 

10.如何设置表自增字段?

1)序列:

create sequence student_id_seq;  --创建序列

insert into student values (student_id_seq.nextval,'张三');

insert into student values (student_id_seq.nextval,'李四');

  2)触发器

      create or replace trigger test_id

before insert on student  --before:执行DML等操作之前触发

for each row  --行级触发器

begin

            select student_id_seq.nextval into :new.id from dual;

end;

/

检验:

insert into student(name) values ('张三');

insert into student (name) values ('李四');

select * from student;

3)自增字段

  1. CREATE TABLE Demo  
  2. (  
  3.     id INT NOT NULL auto_increment PRIMARY KEY,  
  4.     key1 VARCHAR2(40) NULL,  
  5.     key2 VARCHAR2(40) NULL  
  6. ); 

11.Union和union all的区别?

     union:会自动压缩多个结果集中的重复结果,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序。

union all:对两个结果集进行并集操作,即将所有的结果全部显示出来,包括重复行,不进行排序。

拓展资料:

1、union和union all都可以将多个结果集合并,而不仅仅是两个。

2、使用union和union all 必须保证两个要联合的SQL语句 字段个数必须一样,而且字段类型要一致;

3、union因为要进行重复值扫描,所以效率低,如果合并没有刻意要删除重复行,那么久使用union all。

12.排序用什么关键字?默认是升序还是降序?

Order by ,升序

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值