mysql下普通索引和唯一索引的效率对比

 更新时间:2010年12月17日 13:59:24   作者:  
昨天有位同事说,他的网页查询过程中发现普通索引和唯一索引的效率是有差别的,普通索引比唯一索引快

今天在我的虚拟机中布置了环境,测试抓图如下:

抓的这几个都是第一次执行的,刷了几次后,取平均值,效率大致相同,而且如果在一个列上同时建唯一索引和普通索引的话,mysql会自动选择唯一索引。

谷歌一下:

唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n)。

补充下概念:

1、普通索引

 

  普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。

2、唯一索引

  普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。

如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

注:

终于找到同事说执行效率不一样的原因了,他在普通索引上创建的是前缀索引,只取了前16个字节,而唯一索引使用的全字节 :)

相关文章

  • MySQL操作符(and、or、in、not)的具体使用

    MySQL操作符(and、or、in、not)的具体使用

    本文主要介绍了MySQL操作符(and、or、in、not)的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • mysql数据库优化总结(心得)

    mysql数据库优化总结(心得)

    本篇文章是对mysql数据库优化进行了详细的总结与介绍,需要的朋友参考下
    2013-06-06
  • mysql正确安全清空在线慢查询日志slow log的流程分享

    mysql正确安全清空在线慢查询日志slow log的流程分享

    这篇文章主要介绍了正确安全清空在线慢查询日志slow log的流程,需要的朋友可以参考下
    2014-02-02
  • MySQL时区差8小时的多种问题解决方法

    MySQL时区差8小时的多种问题解决方法

    mybatis将本地的数据传入到mysql数据库服务器的时候,服务器会对数据进行检测,会把date类型的数据自动转换为mysql服务器所对应的时区,即0时区,所以会相差8小时,本文给大家介绍了MySQL时区差8小时的问题解决方法,需要的朋友可以参考下
    2024-01-01
  • mysql创建Bitmap_Join_Indexes中的约束与索引

    mysql创建Bitmap_Join_Indexes中的约束与索引

    现象:创建Bitmap Join Indexes时出现ORA-25954报错: 维的主键或唯一约束条件缺失。 53vi.Com 原因:受到约束与索引的影响。
    2008-04-04
  • MySQL事务(transaction)看这篇就足够了

    MySQL事务(transaction)看这篇就足够了

    M事务的实现是基于数据库的存储引擎,不同的存储引擎对事务的支持程度不一样,下面这篇文章主要给大家介绍了关于MySQL事务(transaction)的相关资料,需要的朋友可以参考下
    2022-11-11
  • Mysql 5.7.17 winx64在win7上的安装教程

    Mysql 5.7.17 winx64在win7上的安装教程

    本文给大家介绍Mysql 5.7.17 winx64在win7上的安装教程,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-04-04
  • MySQL数据库字段超长问题的解决

    MySQL数据库字段超长问题的解决

    这篇文章主要介绍了MySQL数据库字段超长问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • MySQL重启之后无法写入数据的问题排查及解决

    MySQL重启之后无法写入数据的问题排查及解决

    客户在给系统打补丁之后需要重启服务器,数据库在重启之后,read_only 的设置与标准配置 文件中不一致,导致主库在启动之后无法按照预期写入,所以本文给大家介绍了MySQL重启之后无法写入数据的问题排查及解决,需要的朋友可以参考下
    2024-05-05
  • 让MySQL中某个表的操作不生成binlog日志的问题解决

    让MySQL中某个表的操作不生成binlog日志的问题解决

    文章介绍了四种方法让MySQL中某个表的操作不生成binlog日志:会话级临时关闭binlog、通过复制过滤规则、调整binlog格式和全局禁用binlog,每种方法都有其适用场景和局限性,建议优先使用会话级临时关闭方法,并根据具体需求选择合适的方案,感兴趣的朋友跟随小编一起看看吧
    2025-03-03

最新评论