> 文档中心 > MySQL 面试题(一)

MySQL 面试题(一)


MySQL 面试题(一)

基础知识

三大范式

  • 第一范式:每个列都不可再拆分

  • 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分

  • 第三范式:在第二范式的基础上,非主键列只依赖与主键,不依赖于其他非主键

MySQL 有关权限的表

  • 这些表由 mysql_install_db 脚本初始化
  • user 权限表:记录允许连接到服务器的用户账号,权限是全局级的
  • db 权限表:记录各个账号在各个数据库上的操作权限
  • table_priv 权限表:记录数据表级的操作权限
  • cloumns_priv 权限表:记录数据列级的操作权限
  • host 权限表:配合 db权限表对给定主机上数据库级操作权限更细致的控制,该权限表不受 GRANT 和 REVOKE 语句的影响

MySQL 的 binlog 有几种录入格式以及区别

声明:在新版的 MySQL 中对 row 级别以及做了一些优化,当表结构发生变化的时候,会记录语句而不是逐行记录。

  • statement 模式下,每一条会修改数据的 sql 都会记录在 binlog 中,而且不会记录每一行的变化,减少了日志量,节约了 I/O,提高性能。由于 sql 执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制
  • row模式下,不记录 sql 语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,基本是可以全部记下来但是由于存在很多操作,会导致大量行的改动(比如 alter table) ,因此这种模式的文件保存的信息太多,日志量太大
  • mixed模式下,这是一种折中方案,普通操作使用 statement 记录,当无法使用 statement 的时候使用 row

常用函数

  • count():返回行数
  • sum():指定列求和
  • max():指定列或表达式最大值
  • min():指定列或表达式最小值
  • avg():指定列或表达式平均值
  • date():指定表达式代表的日期值

数据类型

存储引擎 MyISAM 与 InnoDB 区别

  • 存储结构方面

    • MyISAM 每张表被存放在三个文件:frm-表格定义、MYData-数据文件、MYIndex-索引文件
    • InnoDB 所有的表都存放在独立的表空间文件中,表大小受限于操作系统文件的大小
  • 存储空间

    • MyISAM 可被压缩,存储空间较小
    • InnoDB 的表需要更多的内存和存储,因为它会在主内存中建立其专用的缓冲池用户高速缓冲数据和索引
  • 文件格式

    • MyISAM 数据和索引时分别存储的,数据是MYD、索引是MYI
    • InnoDB 数据和索引是集中存储的 xxx.ibd
  • 外键和事务

    • MyISAM 不支持
    • InnoDB 支持
  • 锁支持

    • MyISAM 表级锁定
    • InnoDB 行级、表级都可,锁定力度小并发能力高
  • 可移植性、备份与恢复

    • MyISAM 的数据以文件的形式存储,跨平台转移比较方便
    • InnoDB 可拷贝数据文件、备份 binlog 或者 mysqldump
  • 查询/更新

    • MyISAM 查询更优,因为内部维护了一个计数器,可直接调用
    • InnoDB 修改更优
  • 索引实现方式

    • MyISAM B+树索引,堆表,不支持哈希索引,支持全文索引
    • InnoDB B+树索引,索引组织表,支持哈希索引

MyISAM 索引和 InnoDB 索引的区别

  • MyISAM 索引是非聚簇索引,InnoDB 索引是聚簇索引
  • MyISAM 索引的叶子节点存储的是行数据地址,还需再寻址一次才能得到数据
  • InnoDB 的主键索引的叶子节点存储着行数据,因此主键索引非常高效
  • InnoDB 非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效

InnoDB 引擎的4大特性

  • 插入缓冲(insert buffer)
  • 二次写(double write)
  • 自适应哈希索引(ahi)
  • 预读(read ahead)

- END -