问题引申

问题1:假设有个数据库字段保存的是用户的身份证号码(id_no),那么我们在针对id_no创建索引的时候是创建唯一索引还是创建普通索引?

  首先来说因为一般来讲身份证号具有唯一性,为了保证数据的唯一性,我们应该将id_no设置为唯一索引;

问题2:如果不考虑业务的唯一性呢?

  如果不考虑业务唯一性问题,那么就考虑操作效率问题了,这个问题其实需要分开来说

  读的情况

    在读的情况下,唯一索引一般情况下是比普通索引要快的,因为查询时, 在未使用limit 1的情况下, 在匹配到一条数据后, 唯一索引即返回, 普通索引会继续匹配下一条数据, 发现不匹配后返回。如此看来唯一索引少了一次匹配, 但实际上这个消耗微乎其微.。所以可以得出结论,唯一索引在读的情况下是略快于普通索引,但是并不明显;

  写的情况

     首先很明确的答案是在写的情况下普通索引反而是比唯一索引要快的。为什么呢?因为普通索引将记录放到change buffer中语句就执行完毕了。而对唯一索引而言, 它必须要校验唯一性, 因此, 必须将数据页读入内存确定没有冲突, 然后才能继续操作。对于写多读少的情况, 普通索引利用change buffer有效减少了对磁盘的访问次数, 因此普通索引性能要高于唯一索引。

 

总结

  如果考虑到业务上的唯一性保障,那么我们一般选择唯一索引,这是保障数据唯一性的最后一道屏障;如果不考虑业务的唯一性,单纯的从读写效率来说,在写比较多的情况下,我们选择唯一索引更合适。

原文地址:http://www.cnblogs.com/lsgspace/p/16900693.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性