如果能够保证业务代码不会写入重复数据,就可以继续往下看。 如果业务不能保证,那么必须创建唯一索引。

关于查询能力

普通索引和唯一索引在查询能力上是没有很大差别的。
如:select id from T where k=5
1、普通索引查找到满足条件的第一个记录(5,500)后需要查找下一个记录,直到碰到第一个不满足k=5条件的记录。
2、对于唯一索引,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止搜索。

InnoDB的数据按照数据页来读写,每一个数据页大小默认为16KB.
对于普通索引来说,查找k=5的记录,该记录所在的数据页都在内存里,无非就是多做一次
查找与判断下一条记录的操作。
当然,如果刚好k=5这个记录在数据页的最后一行,那么就得读取下一个数据页,这个会稍微复杂一点。

关于change buffer

需要更新一个数据页时,如果数据页在内存中就直接更新。
如果这个数据页在磁盘中,InnoDB会将这些更新操作缓存在change buffer中,这样就不需要从磁盘中读这个数据页了。
在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行change buffer中的关于这个页的操作。
change buffer 优点:
将更新操作先记录到change buffer ,减少读磁盘,语句执行速度会提升。
数据读入内存会占用buffer pool,使用change buffer可以避免占用内存,提高内存利用率
change buffer 缺点:
1、唯一索引的更新不能使用change buffer
2、change buffer的主要目的就是将记录变更动作缓存下来,在一个数据页merge之前,change buffer上记录越多,收益越大
如果一个业务的更新模式是写入后马上做查询,这样不会减少IO访问,反而增加了change buffer的维护代价。

关于写能力(基于change buffer)

普通索引在不需要立即读时候可以很好的应用change buffer,所以大部分场合建议使用普通索引。
如果在更新之后,马上伴随这个记录拆线呢,那么建议关闭change buffer。
redo log 主要节省的是随机写磁盘的IO消耗,change buffer 主要节省的则是随机读磁盘的IO消耗。

<MySQL>何时使用普通索引,何时使用唯一索引相关推荐

  1. Mysql数据库(十一)unique index 唯一索引

    Mysql数据库(十一)unique index 唯一索引 唯一索引和普通索引: 1.都是能够加快搜索速度 2.唯一索引中的值不允许重复,普通索引的值允许重复 表contacts 建表语句如下,其中, ...

  2. oracle 强制索引_当唯一索引遇见分布式数据库

    这是Tank的第18篇文章 1 关于分片键 分布式数据库通过将表的数据打散,按一定规则将数据分布在多个独立的主机上,常见的策略如HASH.RANGE.LIST等分布方式.不考虑中间件的解决方案,在原生 ...

  3. GBase8s 唯一索引与非唯一索引

    唯一索引在列中不允许重复的值出现,可以用来定义和约束表中的一列或者多列组合值,在执行insert和update语句时需要检查唯一性.GBase8s中主键(PRIMARY KEY)会自动创建一个唯一索引 ...

  4. mysql创建唯一索引_mysql创建唯一索引

    资料来源:http://www.cnblogs.com/aquilahkj/archive/2011/11/07/2240310.html 查看索引  show index from 数据库表名 al ...

  5. mysql怎么删除唯一索引_mysql删除唯一索引

    在项目中用spring data jpa指定了一个唯一索引: @Entity @Table(name= "t_product") @Getter @Setter @AllArgsC ...

  6. MySQL普通索引与唯一索引__mysql中唯一索引和普通索引的用途及区别

    MySQL普通索引与唯一索引 索引作用: 提高查询效率,一般加在经常查询或者排序的字段上. 普通索引: 允许字段值重复 唯一索引: 保证数据记录唯一性 如何选择: 查询过程: 对普通索引来说,找到满足 ...

  7. mysql 外键唯一,关于mysql:外键可以引用非唯一索引吗?

    我认为外键意味着单行必须引用单行,但是我正在查看某些表,但事实并非如此. 表1在表2的列2上有一个具有外键约束的列1,但是在表2中有很多记录在列2中具有相同的值. 在column2上也有非唯一索引. ...

  8. mysql 索引冲突_mysql唯一索引已有键值冲突解决办法

    建唯一索引: alter ignore table tmp_qw2 add unique key uk_uid(user_id); IGNORE is a MySQL extension to sta ...

  9. mysql8 Record Locks ,Gap Locks, Next-Key Locks实验2 唯一索引和非唯一索引,无索引情况

    mysql8 Record Locks ,Gap Locks, Next-Key Locks 实验1 mysql8 Record Locks ,Gap Locks, Next-Key Locks 实验 ...

  10. 数据库键(key)、主键(primaryKey)、索引(index)、唯一索引(uniqueIndex)区别

    1.键:key,数据库的物理结构,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的).包括:primary key, unique key, foreign key(主键/唯一键 ...

最新文章

  1. go 1.4支持Android的说明(译文)
  2. Flink JobManager HA模式部署(基于Standalone)
  3. 依赖注入之Autofac使用总结
  4. 一个简单XSS攻击示例及处理
  5. Jmeter JDBC请求-----数据库读取数据进行参数化 通过SSH跳板机连接数据库
  6. java5新特性静态引用、foreach、自动装箱和泛型枚举以及可变参数的总结
  7. hadoop项目实战--ETL--(三)实现mysql表到HIVE表的全量导入与增量导入
  8. 洛谷P1087 FBI树
  9. dede 鼠标移到标题处显示完整标题
  10. kotlin使用spring data jpa(三)
  11. [hadoop源码阅读][0]-初衷和各种资源
  12. 怎么把照片做成计算机主题,windows10主题制作怎么操作_windows10电脑主题如何自己制作...
  13. Java 数据库添加,修改和删除
  14. py3使用py3Fdfs
  15. 论文解读《TS-m6A-DL:使用通用深度学习模型对n6-甲基腺苷位点进行组织特异性识别》
  16. python量化股票源码_使用Python写一个量化股票提醒系统
  17. 产品设计过程中的沉没成本和禀赋效应
  18. Xftp和Xshell使用常见问题
  19. 改进我的人人农场收菜外挂
  20. 鸿蒙不用百度网盘,百度网盘限速有救了!官方新出2种方法,不用开会员

热门文章

  1. Bash脚本教程之set命令
  2. linux 命令 抛后台,Linux 后台执行命令
  3. 以太网例程_开关量转以太网的应用
  4. 数控弯管机xyz转换ybc的算法_花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)...
  5. npm dev run 报错
  6. 点击图片放大至原始图片大小
  7. html笔记(二)html4+css2.0(元素类型、css精灵、宽度自适应、BFC、浏览器相关概述、css统筹)
  8. GitHub注册和Git安装
  9. Spring入门第二十五课
  10. Proximal Algorithms--Accelerated proximal gradient method