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按照时间分组查询的语句

    mysql按照时间分组查询的语句

    这篇文章主要介绍了mysql按照时间分组查询的语句,非常实用,sql语句简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • 关于case when语句的报错问题详解

    关于case when语句的报错问题详解

    SQL CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句,下面这篇文章主要给大家介绍了关于case when语句的报错问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-08-08
  • MYSQL读写性能测试的简单记录

    MYSQL读写性能测试的简单记录

    本文主要介绍了MYSQL读写性能测试的简单记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 深入探究MySQL事务实现原理

    深入探究MySQL事务实现原理

    数据库事务是指一组数据库操作,这些操作必须被视为一个不可分割的单元,要么全部执行成功,要么全部失败回滚,本文详细的给大家介绍了MySQL事务的实现原理,对我们学习MySQL有一定的帮助,感兴趣的同学可以跟着小编一起来探究
    2023-06-06
  • MySQL中查询当前时间间隔前1天的数据

    MySQL中查询当前时间间隔前1天的数据

    实际项目中我们都会遇到分布式定时任务执行的情况,今天通过本文给大家分享MySQL中查询当前时间间隔前1天的数据,查询sql语句给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧<BR>
    2021-12-12
  • MySQL查看和修改最大连接数的方法步骤

    MySQL查看和修改最大连接数的方法步骤

    使用MySQL 数据库的站点,当访问连接数过多时,就会出现 "Too many connections" 的错误,所以我们需要设置MySQL查看和修改最大连接数,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Idea 如何导入Mysql8.0驱动jar包

    Idea 如何导入Mysql8.0驱动jar包

    IDEA中的库(Libraries)就是用来存放外部jar包,我们的项目或模块需要某些jar包时,可以从这里把包导入到模块依赖(Dependencies)中,本文给大家介绍Idea 如何导入Mysql8.0驱动jar包,感兴趣的朋友一起看看吧
    2023-12-12
  • mysql count()函数不计算null和空值问题

    mysql count()函数不计算null和空值问题

    这篇文章主要介绍了mysql count()函数不计算null和空值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySql的事务使用与示例详解

    MySql的事务使用与示例详解

    这篇文章主要介绍了MySqld的事务用法,需要的朋友可以参考下
    2014-06-06
  • MySQL错误代码:1052 Column 'xxx' in field list is ambiguous的原因和解决

    MySQL错误代码:1052 Column 'xxx' in field list is

    今天在工作中写sql语句时遇到了个sql错误,为记录并不再重复出错,下面这篇文章主要给大家介绍了关于MySQL错误代码:1052 Column 'xxx' in field list is ambiguous的原因和解决方法,需要的朋友可以参考下
    2023-04-04

最新评论