美文网首页
MySQL实战 | 09 普通索引还是唯一索引?

MySQL实战 | 09 普通索引还是唯一索引?

作者: hoxis | 来源:发表于2019-02-26 12:28 被阅读40次

普通索引和唯一索引如何选择?

脑图地址:https://mubu.com/doc/aRFaYEd5EG

  • 几种索引
    • 普通索引
      • 作用:加快对数据的访问速度
      • 一般加在经常查询或者排序的字段上
      • 允许字段值重复
    • 唯一索引
      • 保证数据记录的唯一性
      • 目的是为了避免数据重复
      • 维护数据完整性
  • 如何选择
    • 查询效率
      • 普通索引会查询多个,需要多出查找和判断下一条记录的动作
      • 唯一索引查询一次
      • 性能差不多
        • InnoDB 的数据是按数据页为单位来读写的
        • 一个数据页可以放近千个 key
        • 很少出现跨数据页查询的情况
    • 更新效率
      • change buffer
        • 更新数据页时,若数据页在内存中,则直接更新
        • 若数据页不在内存中,则先将更新操作缓存在 change buffer 中
        • redo log 里记录了数据页的修改以及 change buffer 新写入的信息
        • 下次查询时,先将数据读入内存,然后再执行缓存在 buffer 中的操作
        • 可以持久化,在内存中有拷贝,也会写入磁盘
        • 何时 merge 数据?
          • 访问该数据页
          • 后台定期 merge
          • 关闭数据库时
        • 优点
          • 减少磁盘读 IO
      • 唯一索引的更新过程
        • 唯一索引需要确保数据的唯一性
        • 若目标数据页不在内存中,需要将数据读取到内存
        • 不会使用到 change buffer,直接在内存中更新
      • 普通索引
        • 若目标数据页不在内存中,直接将更新缓存到 change buffer 中
        • 适合写多读少的业务
        • 若写完立马就读,就需要数据的 merge
        • 不但不能减少磁盘 IO,会增加了 change buffer 的维护代价
      • 结论
        • 数据从磁盘读入内存涉及随机 IO 的访问
        • 唯一索引的更新代价更大
  • 索引最终选择
    • 查询能力上差别不大
    • 更新性能差别较大
    • 若业务没有字段的唯一性要求,推荐使用普通索引
    • 另外,就算有唯一性需求,唯一性也可以用业务层来保证,例如 uuid
    • 普通索引和 change buffer 的配合使用,对于数据量大的表的更新优化还是很明显的
普通索引还是唯一索引
你的关注是对我最大的鼓励!

关注本公众号,后台回复「2018」即可获取传智播客 2018 最新 Python 和 Java 教程。

公众号提供CSDN资源免费下载服务!


相关文章

  • MySQL实战 | 09 普通索引还是唯一索引?

    普通索引和唯一索引如何选择? 脑图地址:https://mubu.com/doc/aRFaYEd5EG 几种索引普...

  • MySQL操作索引

    MySQL操作索引 增加普通索引 增加唯一索引 删除索引

  • MYSQL索引

    mysql的4种常用索引类型:唯一索引,主键索引,全文索引,以及普通索引。 普通索引(INDEX):普通索引为索引...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

  • mysql

    1.mysql索引的类型,主键索引、唯一索引、普通索引、组合索引、全文索引,b-tree索引 2.mysql具体有...

  • 7. Interview-MySQL

    1 MySQL索引类型? 普通索引,index 主键索引,primary 唯一索引,unique index 全文...

  • Mysql 基础知识(下)

    Mysql 基础知识(上) 1.4. Mysql的索引实现 1.4.1. 常见的索引 常见的索引有:普通索引、唯一...

  • MySQL索引类型

    MySQL的索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 普通索引 ind...

  • MySQL 唯一索引和非唯一索引(普通索引)区别

    如果在一个列上同时建唯一索引和普通索引的话,mysql 会自动选择唯一索引唯一索引和普通索引使用的结构都是 B-t...

  • mysql 查询效率优化之 常用索引的几种类型 新手使用教程,少

    Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引(联合索引,多列索引) 一、建立的方法介绍 ...

网友评论

      本文标题:MySQL实战 | 09 普通索引还是唯一索引?

      本文链接:https://www.haomeiwen.com/subject/mjkayqtx.html