1.数据库三范式是什么?
①第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分)
②.第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。
③.满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 >所以第三范式具有如下特征: >>1. 每一列只有一个值 >>2. 每一行都能区分。 >>3. 每一个表都不包含其他表已经包含的非主关键字信息。
2.有哪些数据库优化方面的经验?
①. 用 PreparedStatement, 一般来说比 Statement 性能高:一个 sql发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。
②. 有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。
③. 表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等
④. UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用 UNIONALL。
3.设计表结构时把表拆分得更细可以提高性能吗?
如果你拆分了后,不经常执行那种Join的语句,一般是可以提高性能的。比如:
示例1:在 Users 表中有一个字段是家庭地址,这个字段是可选字段,相
比起,而且你在数据库操作的时候除了个人信息外,你并不需要经常读取或是
改写这个字段。那么,为什么不把他放到另外一张表中呢? 这样会让你的表有
更好的性能,大家想想是不是,大量的时候,我对于用户表来说,只有用户
ID,用户名,口令,用户角色等会被经常使用。小一点的表总是会有好的性
能。
示例2: 你有一个叫 “last_login” 的字段,它会在每次用户登录时被
更新。但是,每次更新时会导致该表的查询缓存被清空。所以,你可以把这个
字段放到另一个表中,这样就不会影响你对用户 ID,用户名,用户角色的不停
地读取了,因为查询缓存会帮你增加很多性能。
4.说说你对于MySQL主从模式的了解?
Mysql内置的主从复制功能是构建大型、高性能应用程序的基础,又叫Replication、AB复制。简单讲就是A与B两台机器做主从后,在A上修改(写入)数据,另外一台B也会跟着修改数据,主和从的数据实时同步。mysql主从是基于binlog,主上需开启binlog才能开启主从模式。
主从过程大概有3个步骤:
①主将更改操作记录到binlog里
②从将主的binlog事件(sql语句) 同步本机上并记录在relaylog里
③从根据relaylog里面的sql语句按顺序执行
主从作用:实时灾备,用于故障切换;读写分离,提供查询服务;备份,避免影响业务
5.MySQL中MyISAM与与InnoDB引擎的区别?
①事务方面,MyISAM强调的是性能,每次查询具有原子性 , 其执行数度比InnoDB类型更快,但是不提供事务支持。 InnoDB提供事务支持,外键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
②锁方面, MyISAM 支持表级锁,用户在执行select,update,delete,insert 语句都会给整个表自动加锁,所以时说MyISAM适合查询较多的场景,否则性能不高。当然,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
来源:CSDN
作者:tom_DT
链接:https://blog.csdn.net/tom_DT/article/details/104044014