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
投稿

猜你喜欢

  • 画好线框图的20个步骤

    2009-09-01 19:46:00
  • 用asp编写文档搜索页面

    2008-01-13 07:04:00
  • 分析描述CentOS mysql安装系统

    2010-10-25 20:34:00
  • 浅说相册图片详情页面中大图的浏览方式

    2009-02-01 18:34:00
  • ASP 3.0中的新特性

    2008-02-27 13:28:00
  • 用Flash来作浏览历史功能

    2009-08-11 14:47:00
  • 如何提升JavaScript的运行速度(DOM篇)[译]

    2009-02-25 12:24:00
  • Asp中如何设计跨越域的Cookie

    2008-10-24 09:46:00
  • 认识那些被忽略的SQL Server注入技巧

    2009-01-20 13:15:00
  • WorkBench管理操作MySQL

    2010-10-14 14:21:00
  • 某年第一周开始日期sql实现方法

    2012-02-25 20:02:30
  • Web 2.0 框架发布

    2008-03-25 09:40:00
  • 将ASP记录集输出成n列的表格形式显示的方法

    2011-04-08 10:51:00
  • 设计"以人为本"和"绿色设计"

    2008-10-07 12:21:00
  • 正计时JS代码

    2008-05-25 14:53:00
  • 语义化提高页面质量

    2007-10-07 11:56:00
  • ASPError(err)对象的相关基础知识

    2008-03-24 20:23:00
  • asp 快钱网关接口 支付宝接口 财付通接口代码

    2011-03-08 10:55:00
  • 浅谈ASP自动采集程序及入库

    2007-08-17 11:25:00
  • MySQL6.0新增特性

    2010-03-25 10:08:00
  • asp之家 网络编程 m.aspxhome.com