aba问题mysql_mysql⾯试题
1 数据库三范式
范式是数据库具有最⼩冗余的表结构
1 第⼀范式 确保每列保持原⼦性 要求数据库表的每⼀列多事不可再分割的基本数据项,同⼀列中不能有多个值,若某⼀列有多个值,可将该列单独拆分成⼀个实体,新实体和原实体是⼀对多的关系
2 第⼆范式 ⾸先要满⾜第⼀范式,并且表中⾮主键列不存在对主键的部分依赖。⼆范式在⼀范式之上更进⼀层,⼆范式要确保数据库表中的每⼀列都要和主键相关,⽽不能和主键的某部分相关,也就是说在⼀个数据库表中,⼀个表只能保存⼀种数据,不可以把多种数据保存在同⼀张表内。
3 第三范式 其条件是:满⾜第⼆范式、并且表中的列不存在对⾮主键列的传递依赖,第三范式需要确保数据表中的每⼀列数据都和主键直接相关、⽽不能间接相关。
2 为什么⽤⾃增列作为主键
在InnoDB存储引擎中,主键索引是作为聚簇索引存在的,也就是说,主键索引的B+树叶⼦节点上了存储了主键索引以及全部的数据,如果主键索引是⾃增ID,那么只需要向不断向后排列即可。mysql数据库题目及答案
如果是UUID,由于到来的ID与原来的⼤⼩不确定,会造成⾮常多的数据插⼊、数据移动。就会导致产⽣很多的内存碎⽚,进⽽造成插⼊性能的下降。
mysql面试题基础知识3 为什么使⽤索引什么样的信息能成为索引
快速查询数据 主键或者唯⼀字段以及普通键
创建唯⼀索引,保证数据表中每⼀⾏数据的唯⼀性
加速表之间的连接
4 简单描述mysql中,索引 主键 唯⼀索引 联合索引的区别,从读⽅⾯分析对数据库的性能有什么影响
1 索引是⼀种特殊的⽂件(InnoDB数据表上的索引是表空间的⼀个组成部分),它包含着对数据表⾥所有记录的引⽤指针。
2 普通索引(由key活index定义的索引)其唯⼀任务就是加快对数据的访问素的。
3普通索引允许被索引的数据列包含重复的值,如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该⽤关键字unnique把它定义为⼀个唯⼀索引。唯⼀索引可以保证数据记录的唯⼀性。
大型php论坛源码4索引可以覆盖多个数据列,如index(columnA,columnB)索引,就是联合索引。
5 索引可以极⼤地提⾼数据的查询速度,但是会降低插⼊、删除、更新表的速度,因为在执⾏这些写操作时,需要操作索引⽂件。
负⾯影响:创建索引和维护索引需要消耗时间,这个时间随着数据量的增加⽽增加;索引需要占⽤物理空间,当对表进⾏增删改的时候索引也需要动态维护,这样就降低了数据的维护速度。
不宜建⽴索引的情况:对于查询中很少涉及列或者重复值⽐较多的列、特殊的数据类型(如 ⽂本)都不建议建⽴索引。
荧光插件5 常见的索引原则
选择唯⼀性索引:唯⼀性索引的值是唯⼀的,可以更快速的通过该检索引来确定某条记录。
为经常需要排序 分组 联合查询操作的字段建⽴索引。
为常做查询条件的字段建⽴索引。
限制索引的数⽬:索引越多,更新越长。
尽量使⽤数据量少的索引:如果索引很长会影响查询的速度,尽量使⽤前缀来索引
最左前缀匹配原则
尽量选择分区度⾼的列作为索引:区分度的公式是表⽰字段不重复的⽐例索引列不能参与计算,保持列 ⼲净 ,带函数的查询不参与索引,尽量的扩展索引,不新建索引。
6 事务的四⼤特征:
原⼦性:是不可分割的最⼩操作单位,要么同时成功,要么同时失败。
持久性:当事务提交或回滚后,数据库会持久化的保存数据。
隔离性:多个事务之间。相互独⽴。
⼀致性:事务操作前后,数据总量不变
7 事务的四种隔离级别:
read uncommitted 读未提交,⼀个事务可以读取另⼀个未提交事务的数据。
read committed 读已提交,⼀个事务要等另⼀个事务提交后才能读取数据。
Repeatable read 可重复读,读取数据时不允许修改操作。
Serializable序列化 最⾼事务隔离级别,在该级别下,事务串化顺序执⾏,可以避免脏读、不可重复读、幻读。这种事务隔离级别效率低,⽐较消耗数据库性能,⼀般不使⽤。
mysql数据库默认的为read committed⽽oracle数据库只⽀持Serializable和read committed两种级别。
8 触发器
触发器是⼀段能⾃动执⾏的程序,是⼀种特殊的存储过程,触发器和普通存储的区别是:触发器是当对某⼀个表进⾏操作时触发,Sql Server中触发器分为两类:DML和DDL
9 数据库并发策略
aspen one v12并发控制⼀般采⽤三种⽅法:乐观锁、悲观锁、时间戳
乐观锁:乐观锁认为⼀个⽤户读取数据时,⽐⼈不太会去写⾃⼰所读的数据;悲观锁则相反,觉得⾃⼰读数据库时,别⼈可能刚好在写⾃⼰刚读的数据,持有的是保守态度;时间戳就是不加锁,通过时间戳来控制并发出现的问题。
悲观锁:在读取数据的时候,为了不让别⼈修改⾃⼰读取的数据,就会先对⾃⼰读取的数据加锁,只有⾃⼰读取结束,才允许别⼈修改数据,或者是⾃⼰修改数据的时候,则不允许别⼈读取,只有提交事务之后,才允许别⼈访问数据。
两种锁使⽤的场景:乐观锁适⽤于写⽐较少的情况,冲突很少发⽣的时候,这样就跳过了开锁,加⼤了系统的吞吐量,如果是多写的情况,⼀般会经常发⽣冲突,则适⽤悲观锁。
时间戳:就是在数据库表中单独加⼀列时间戳,例如"TimeStamp" 每次读出来的时候,把该字段也读出来,当写回去的时候,把该字段+1,提交之前,跟数据库的该字段⽐较⼀次,如果⽐数据库的值⼤的话,就允许保存,否则不允许保存,这种处理⽅法虽然不使⽤数据库系统提供的锁机制,但是这种⽅法可以⼤⼤提⾼数据库处理的并发量网易客服人工在线电话
10 乐观锁的缺点
ABA问题:如果⼀个变量V初次读取的时候是A值,并且在准备复制的时候检查到它仍然是A值,那我们也⽆法确定它的值是否被修改,在此期间他的值可能被该为其他值⼜改回A。
循环时间长开销⼤:⾃旋CAS如果长时间不成功会给cpu带来⾮常⼤的开销。
只能保证⼀个共享变量的原⼦操作:CAS只对单个共享变量有效,当操作涉及多个共享变量是CAS⽆
效。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论