1 数据库三大范式是什举
- 第一范式:每个列都不可以再拆分。
- 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
- 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
在设计数据库结构的时候,要尽量遵守三范式。如果不遵守,必须有足够的理由。比如性能,事实上我们经常会为了性能而妥协数据库的设计。
2 MySQL 有关权限的表都有哪几个?
MySQL 服务器通过权限表来控制用户对数据库的访问,权限表存放在 MySQL 数据库里,由mysql_install_db
脚本初始化。这些权限表分别user
,db
,table_priv
,columns_priv
和host
。下面分别介绍一下这些表的结构和内容:
user权限表
:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。db权限表
:记录各个帐号在各个数据库上的操作权限。table_priv权限表
:记录数据表级的操作权限。columns_priv权限表
:记录数据列级的操作权限。host权限表
:配合 db 权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受 GRANT 和 REVOKE 语句的影响。
3、MySQL 的 Binlog 有有几种录入格式?分别有什么区别?
有三种格式,statement
,row
和 mixed
。
- statement 模式下,每一条会修改数据的 SQL 都会记录在 Binlog 中。不需要记录每一行的变化,减少了 Binlog 日志量,节约了 IO,提高性能。由于sql 的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制。
- row 级别下,不记录 SQL 语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,基本是可以全部记下来但是由于很多操作,会导致大量行的改动(比如 alter table),因此这种模式的文件保存的信息太多,日志量太大。
- mixed,一种折中的方案,普通操作使用 statement 记录,当无法使用statement 的时候使用 row。
4、MySQL 存储引擎 MyISAM 与 InnoDB 区别
- 锁粒度方面:
- 由于锁粒度不同,InnoDB 比 MyISAM 支持更高的并发;
- InnoDB 的锁粒度为行锁、MyISAM 的锁粒度为表锁、行锁需要对每一行进行加锁,所以锁的开销更大,但是能解决脏读和不可重复读的问题,相对来说也更容易发生死锁
- 可恢复性上:
- 由于 InnoDB 是有事务日志的,所以在产生由于数据库崩溃等条件后,可以根据日志文件进行恢复。
- 而 MyISAM 则没有事务日志。
- 查询性能上:
- MylSAM 要优于 InnoDB 因为 InnoDB 在查询过程中,是需要维护数据缓存,而且查询过程是先定位到行所在的数据块,然后在从数据块中定位到要查找的行;
- 而 MyISAM 可以直接定位到数据所在的内存地址,可以直接找到数据。
- 表结构文件上:
- MyISAM 的表结构文件包括:
frm(表结构定义)
,.MYI(索引)
,.MYD(数据)
; - 而 InnoDB 的表数据文件为:
ibd
和frm(表结构定义)
。
- MyISAM 的表结构文件包括:
5、MyISAM 索引与 InnoDB 索引的区别?
- InnoDB 索引是聚簇索引,MyISAM 索引是非聚簇索引。
- InnoDB 的主键索引的叶子节点存储着行数据,因此主键索引非常高效。
- MyISAM 索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数
据。 - InnoDB 非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。
6、什么是索引?
- 索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
索引是一种数据结构
。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B 树及其变种 B+树。
更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,它是要占据物理空间的。
7、索引有哪些优缺点?
索引的优点:
- 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
- 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
索引的缺点:
- 时间方面:创建索引和维护索引要