数据库面试题 (视图,索引, 事务)

/*

1.视图作用是什么?好处有哪些 ?

1、视图能够简化用户的操作
2、视图使用户能以多钟角度看待同一数据
3、视图对重构数据库提供了一定程度的逻辑独立性
4、视图能够对机密数据提供安全保护
5、适当的利用视图可以更清晰的表达查询,

2.索引的必要性有哪些?怎么合理添加索引?索引的优势?

1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;
以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

3.索引的原理(索引的必要性)

索引的原理 1、索引是一种允许直接访问数据表中某一数据行的树型结构,为了提高查询效 率而引入,是独立于表的对象,可以存放在与表不同的表空间(TABLESPACE) 中。索引记录中存有索引关键字和指向表中数据的指针(地址)。对索引进行的 I/O操作比对表进行操作要少很多。 2、索引一旦被建立就将被Oracle系统自动维护,查询语句中不用指定使用哪个 索引,是一种提高查询效率的机制。
3、ROWID: 伪列,唯一标识一条数据记录,可理解为行地址。

4.事务会出现哪些并发性问题?怎么解决? - 事务的隔离级别 事务并发锁:行级、表级

事务并发问题: 脏读(另一个事务读取到了一个事务没有提交的内容)、
换读(a,b两个管理员,a删除一个数据,b新增了一个数据,b新增的就是a删除的数据(存在于插入删除SQL语句))
不可重复读(一个人去查到了20 另一个人改了30 第一个人再去看变成了30 (INSERT 和 UPDATE 中会出现))
事务的隔离级别:
读未提交 - 最低,解决不了任何问题
读已提交的 - 解决脏读问题
可重复读 - 解决脏读、不可重复读问题
串行化 -一个一个来,效率低 最高隔离级别 (可以解决所有问题)

行级锁:(tx锁,也叫事务锁)
一、悲观锁:数据库行级锁,目的是让数据被查出来的时候就加上锁,然后再执行下面的程序逻辑,这样后面为了操作相同数据而进来的请求,就会在一开始就被拦住(这种效果千万不要以为可以做防重复提交)

	二、乐观锁:这不是数据库本身的锁,是利用数据比较结果来当做抽象的锁;举个例子就明白:

说明:小明成绩错了,要改成绩。班主任能改,年级主任也能改!

表级锁:

一般指的是表结构共享锁。是不可对该表进行DDL操作,但是对于该表数据的DML操作不受影响

你可能感兴趣的:(面试)