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

来源:站长家园 时间:2010-12-08 16:03:00 

昨天有位同事说,他的网页查询过程中发现普通索引和唯一索引的效率是有差别的,普通索引比唯一索引快,

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



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

谷歌一下:

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

补充下概念:

1、普通索引

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

2、唯一索引

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

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

注:

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


标签:索引,mysql
0
投稿

猜你喜欢

  • FSO无效的过程调用或参数问题

    2010-03-25 21:49:00
  • Python asyncore socket客户端实现方法详解

    2022-06-18 14:17:42
  • Win10下免安装版MySQL8.0.16的安装和配置教程图解

    2024-01-17 02:47:44
  • python创建关联数组(字典)的方法

    2021-11-22 06:51:18
  • 详解KMP算法以及python如何实现

    2022-11-17 05:27:18
  • 教你使用Python pypinyin库实现汉字转拼音

    2021-10-03 16:48:36
  • Python实现京东抢秒杀功能

    2021-12-06 04:50:17
  • php中用socket模拟http中post或者get提交数据的示例代码

    2023-11-19 00:45:21
  • [MySQL binlog]mysql如何彻底解析Mixed日志格式的binlog

    2024-01-16 23:34:05
  • pandas创建series的三种方法小结

    2023-02-28 20:59:23
  • Python 提取dict转换为xml/json/table并输出的实现代码

    2021-01-26 17:56:17
  • javascript浮点数计算的bug

    2009-12-06 11:43:00
  • mysql中各种常见join连表查询实例总结

    2024-01-19 05:31:52
  • MySQL数据库磁盘优化

    2008-11-24 17:29:00
  • selenium+opencv实现滑块验证码的登陆

    2022-03-28 06:49:04
  • 浅析Windows 嵌入python解释器的过程

    2023-01-26 11:43:28
  • Python自动扫描出微信不是好友名单的方法

    2023-03-14 09:25:44
  • 几行代码轻松实现PHP文件打包下载zip

    2024-06-05 09:47:49
  • javascript动态添加单元格的脚本代码

    2023-09-02 05:21:26
  • python:socket传输大文件示例

    2022-04-18 19:44:26
  • asp之家 网络编程 m.aspxhome.com