1.连接池的设计思路?

 

2.常见的数据库优化方法

1.数据分区

2.建立索引

3.缓存机制

4.加大虚存

5.分批处理

6.使用临时表和中间表

7.优化查询语句

8.使用视图

9.使用存储过程

10.排序来取代非顺序存储

3.索引的作用?优点缺点?什么样的字段适合建立索引?

索引就是一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似于现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。索引大大减少了服务器需要扫描的数据行数、帮助服务器避免进行排序和创建临时表,以及将随机I/O变为顺序I/O。

缺点:减慢数据录入的速度,同时也增加了数据库的尺寸大小,尤其是当表为特大型表时,创建和维护索引的开销很大。唯一、不为空、经常被查询的字段适合建索引。

4.在数据库中查询语句速度很慢,如何优化?

如果是大多数情况下是正常的,偶尔很慢,则有如下原因:

1.数据库在刷新脏页,例如redo log写满了,需要同步到磁盘

2.执行的时候,遇到锁,如表锁、行锁等。(减少表之间的关联)

如果这条SQL一直执行的很慢则:

1.没有用索引:例如该字段没有索引,由于对字段进行运算、函数操作导致无法用索引 ,解决办法:建索引

2.数据库选错了索引

优化:

1.建索引

2.减少表之间的关联

3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面

4.简化查询字段,不用的字段就不用查询,对返回结果尽量控制,尽量返回少量数据

5.尽量用PreparedStatement来查询,不要用statement

5.触发器的作用?

触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如:某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

6.什么是存储过程?用什么来调用?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

调用:可以用一个命令对象来调用存储过程,也可以供外部程序调用比如java程序。

7.存储过程的优缺点?

1.存储过程是预编译过的,执行效率高

2.存储过程的代码直接存放在数据库中,通过存储过程名直接调用,减少网络通讯

3.安全性高,执行存储过程需要有一定权限的用户

4.存储过程可以重复使用,可以减少数据库开发人员的工作量

缺点:移植性差

8.什么是事务?什么是锁?

事务:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上一节点。为了确保要么执行,要么不执行,就可以使用事务。要将一组语句作为事务考虑,就需要用过ACID测试,即原子性,一致性,隔离性和持久性。

数据库开启事务命令:

1.start transaction:开启事务

2.rollback:回滚事务

3.commit:提交事务

事务的四大特性(ACID):

原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败,比如在同一事务中的SQL语句,要么全部执行成功,要么全部执行失败。

一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。事务前后数据的完整性必须保持一致。以转账为例,A向B转账,假设转账之前这两个用户的钱加起来总共2000元,那么A向B转账后,不管这两个账户怎么转,A用户的钱和B用户的钱加起来的总额还是2000,这个就是事务的一致性。

隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性(Durability):持久性是指一个事物一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

事务不考虑隔离性可能会引发的问题:

脏读:一个事物读取了另一个事务未提交的数据

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同

幻读:行数不一样了

锁:在所有的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中的锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构,当然锁是分级别的。

9.什么是视图?游标是什么?

视图:是一种虚拟的表,具有和物理表相同的功能,可以对视图进行增、删、改、查操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表,它使得我们获取数据更容易,想对比多表查询。

游标:是对查询出来的结果集作为一个但原来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改,一般不会使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

10.视图的优缺点?

优点:

1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分

2.用户通过简单的查询可以从复杂查询中得到结果

3.维护数据的独立性,视图可以从多个表检索数据

4.对于相同的数据可产生不同的视图

缺点:

查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,就无法更改数据。

11.列举几种表连接方式,有什么区别?

内连接,外链接(左、右、全),自连接,交叉连接

内连接:只有两个元素表相匹配的才能在结果中显示。

交叉连接:笛卡尔效应,显示的结果是连接表数的乘机

左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示

右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示

全外连接:连接的表中不匹配的数据全部会显示出来

12.主键和外键的区别?

主键在本表中是唯一的、不可为空的

外键可以重复可以为空

外键和另一张表的主键关联,不能创建对应表中不存在的外键。

13.数据库三范式是什么?

第一范式:列不可再分

第二范式:行可以唯一区分,主键约束

第三范式:表的非主属性不能依赖于其他表的非主属性,外键约束

三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立在第一第二范式上。

14.MySQL索引使用B+树的原因是什么?

B+树的特点:B+树中,叶子结点包含了全部关键字,所有非叶子结点仅仅起到索引的作用。B+树中有两个头指针:一个指向根节点,另一个指向关键字最小的叶节点,因此,可以对B+树进行两种查找,一种是从最小关键字开始的顺序查找,另一种是从根节点开始进行多路查找。

由于B+树内结点去掉了data域,因此可以拥有更大的出度,检索效率会更高。这是优点之一。另一个优点是,B+树所有的Data域都在叶子结点,一般来说都会进行一个优化,就是将所有的叶子结点用指针串起来,这样遍历叶子结点就能获得全部数据,这样就能进行区间访问。

15.主键、外键的作用,索引的优点与不足?

主键:是表中的唯一标识。作用:保证实体的完整性,加快数据库的操作速度;增加新的表记录时,数据库会自动检索新纪录的主键值,不允许该值与其他表中记录的主键重复;数据库会按照主键值的顺序显示记录,如果没有设定主键,则按输入的顺序显示记录。

外键:是主键的从属,表示了两个表之间的联系。作用:使用外键可以避免冗余。

 

索引的优点:

1.通过创建唯一性的索引,可以保证表中数据的唯一性;

2.加快数据的检索速度;

3.加快表与表之间的连接;

4.在使用分组与排序数据检索时,可以显著检索分组与排序的时间;

5.在查询的过程中使用优化隐藏器,提高系统性能。

缺点:

1.创建索引需要时间,且随着数据量的增加而增加;

2.索引需要占用物理空间;

3.当对表中数据进行修改时,索引也要动态维护,降低了数据的维护速度。