数据库

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命令查看具体进程

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值