Tag Archives: MySQL

MySQL 普通索引和唯一索引

By | 2月 17, 2021

问题引入

假设在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似的 SQL:

select name from user where id_card = 'xxx';

所以,我们一定会考虑在 id_card 字段上建索引。

由于身份证号字段比较大,所以它不适合当做主键。那么 id_card 字段是要创建唯一索引还是普通索引呢?此处假设业务代码已经保证了不会写入重复的身份证号,这两个选择在逻辑上都是正确的。…

MySQL 索引

By | 2月 14, 2021

索引分类

索引类型分为 主键索引非主键索引

主键索引的叶子节点存储的是整行数据。在 InnoDB 里,主键索引也被称为 聚簇索引(clustered index)

非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为 二级索引(secondary index)

基于主键索引和普通索引的查询有什么区别?

  • 如果语句是 select * from T where id=500 这种主键查询方式,则只需要搜索 id 这个索引对应的

MySQL 日志模块

By | 2月 13, 2021

MySQL 里如果每一次的更新操作都写磁盘的话,那么这个过程中磁盘要找到对应的那条记录,然后再更新,整个过程中的 IO 成本、查找成本都很高,所以 MySQL 中采用了 WAL(Write-Ahead Logging)技术来解决这个问题。

关键点是:先写日志,再写磁盘

redo log

redo log 是 InnoDB 引擎特有的日志。

当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 中,并更新内存,这个时候更新就算完成了。同时,InnoDB…