MySQL常见考点

237 阅读2分钟

数据库 vs 实例

数据库指文件的结合

实例指程序, 由单进程多后台线程(共享内存区)构成的运行实例

在集群情况下, 数据库与实例可以一对多

用户通过实例, 对数据库进行操作

InnoDB存储引擎

  • 事务
  • 行锁
  • 外键
  • 读操作不加锁
  • 1.2后支持全文索引
  • 默认repeatable隔离级别
  • 用next-key locking避免幻读
  • 聚集索引, 每张表按主键顺序存放

MyISAM存储引擎

  • 支持全文索引
  • 只缓存索引文件, 不缓存数据文件
  • 不支持事务, 行锁, 外键

NDB存储引擎

  • 索引数据全部在内存(非索引数据可内存/磁盘), 主键查找快
  • JOIN在数据库层完成而不是存储引擎层, JOIN很慢

Memory存储引擎

  • 表数据全部在内存中, 一般用于临时表
  • hash索引而不是B+树索引
  • 只支持表锁
  • 不支持test, blob, varchar用char实现
  • 超过容量或有test/blob时会被转换为MyISAM, 查询性能下降

MySQL连接

基于TCP/IP的socket连接, 将可访问用户的IP权限记录在user表中

Windows中位于同一服务器的进程通信可以使用命名管道/共享内存

在-nux系统下还可使用unix socket, 即访问同一主机上的socket文件

InnoDB

日志

用来实现事务, 采用预写日志和redo

当开始事务时,会记录该事务的lsn(log sequence number)号;

当事务执行时,会往InnoDB存储引擎的日志的日志缓存里面插入事务日志;

当事务提交时,必须将存储引擎的日志缓冲写入磁盘(通过innodb_flush_log_at_trx_commit来控制),也就是写数据前,需要先写日志