https://www.cnblogs.com/Chenshuai7/p/5142754.html 数据库--函数
1、数据库引擎:
用于存储、处理和保护数据的核心服务,利用数据库引擎可控制访问权限并快速处理事务,使用引擎创建用于联机事务或联机分机处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程),可以使用SQL Server Mangement管理数据库对象,使用SQL Server Drofiler捕获服务器事件
2、存储过程:
在大型数据库中,一组为了完成特定功能的SQl语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它,存储过程是数据库中的一个重要对象
3、数据库事务的四大特性:
原子性、一致性、隔离性、持久性
4、说出数据连接池的工作机制是什么
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
最大维持连接数:没有任何请求时在连接池中可以存在的连接数
最大连接数:连接池中最多可以存在的连接个数。
最大等待时间:当断开连接时,超过最大维持连接数的连接不会马上销毁,最大等待时间过后它才会销毁。
连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。
5、常见的数据库优化方案
https://blog.csdn.net/u013628152/article/details/82184809
一、优化方向
1. SQL以及索引的优化
首先要根据需求写出结构良好的SQL,然后根据SQL在表中建立有效的索引。但是如果索引太多,不但会影响写入的效率,对查询也有一定的影响。
2. 合理的数据库是设计
根据数据库三范式来进行表结构的设计。设计表结构时,就需要考虑如何设计才能更有效的查询。
数据库三范式:
第一范式:数据表中每个字段都必须是不可拆分的最小单元,也就是确保每一列的原子性;
第二范式:满足一范式后,表中每一列必须有唯一性,都必须依赖于主键;
第三范式:满足二范式后,表中的每一列只与主键直接相关而不是间接相关(外键也是直接相关),字段没有冗余。
注意:没有最好的设计,只有最合适的设计,所以不要过分注重理论。三范式可以作为一个基本依据,不要生搬硬套。
有时候可以根据场景合理地反规范化:
A:分割表。
B:保留冗余字段。当两个或多个表在查询中经常需要连接时,可以在其中一个表上增加若干冗余的字段,以 避免表之间的连接过于频繁,一般在冗余列的数据不经常变动的情况下使用。
C:增加派生列。派生列是由表中的其它多个列的计算所得,增加派生列可以减少统计运算,在数据汇总时可以大大缩短运算时间。
数据库五大约束:
A:PRIMARY key:设置主键约束;
B:UNIQUE:设置唯一性约束,不能有重复值;
C:DEFAULT 默认值约束
D:NOT NULL:设置非空约束,该字段不能为空;
E:FOREIGN key :设置外键约束。
字段类型选择:
A:尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED
B:VARCHAR的长度只分配真正需要的空间
C:使用枚举或整数代替字符串类型
D:尽量使用TIMESTAMP而非DATETIME
E:单表不要有太多字段,建议在20以内
F:避免使用NULL字段,很难查询优化且占用额外索引空间
3. 系统配置的优化 例如:MySQL数据库my.cnf
4. 硬件优化
更快的IO、更多的内存。一般来说内存越大,对于数据库的操作越好。但是CPU多就不一定了,因为他并不会用到太多的CPU数量,有很多的查询都是单CPU。另外使用高的IO(SSD、RAID),但是IO并不能减少数据库锁的机制。所以说如果查询缓慢是因为数据库内部的一些锁引起的,那么硬件优化就没有什么意义。
6、char和varchar的区别
char的长度是固定的,而varchar的长度是可以变化的,char的效率比varchar的效率快
7、主键与索引
主键一定是唯一性索引,唯一性索引并不一定就是主键,主键就是能够唯一标识表中某行的属性或属性组,一个表只能有一个主键,但可以有多个索引,一个表中可以有多个唯一性索引,但只能有一个主键,主键列不允许空值,而唯一性索引列允许空值
8、行锁与表锁
行锁:访问数据库的时候,锁定整个行数据,防止并发错误
表锁:访问数据库的时候,锁定整个表数据,防止并发错误
区别:表锁:开销小,加锁快,不会出现死锁,锁定力度大,发生锁冲突概率高,并发度最低
行锁:开销大,加锁慢,会出现死锁,锁定力度小,发生锁冲突的概率低,并发度高
9、Mysql服务占用CPU100%,如何排查问题
可以使用show processList命令查看具体进程