天天看点

mysql-唯一索引+自建uid检查数据唯一性

问题场景

  • 由于单表数据量达到千万,且插入操作非常频繁(uniqueId会影响插入性能),故想研究一下到底是uniqueID性能更加优秀还是自建普通索引更加优秀
  • 文章参考极客时间《mysql实战45讲》
  • =-=最近把之前写在有道云笔记上的mysql相关知识全部同步到csdn了=-=,学海无涯啊,继续努力

1,结论先行

  • 1,业务正确性优先,如果业务角度上不能保证或者业务就是需要数据库来做唯一约束则优先考虑在数据库角度上用unique约束保证行数据唯一性
  • 2,在某些归档数据(已经确保没有唯一键冲突的),要提高归档效率,可以考虑把表中的唯一所以改成普通索引

2,查询过程

  • 如果是普通索引,在根据索引查找到第一个数据的主键ID时继续进行检索看是否还有没数据
  • 如果是唯一索引,因为索引直接就进行了约束,所以在根据索引查找到第一个数据的时候就直接停止的搜索
  • 结论: 基本木有影响因为innodb的数据是按照数据页进行读取的,一般情况下第一种情况的时候,往后检索的数据大多数时候也在一块内存页中。

3,更新过程

  • 因为change buffer 的影响,非唯一性索引的效率会低于普通索引
  • change buffer:https://dev.mysql.com/doc/refman/5.7/en/innodb-change-buffer.html

继续阅读