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

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

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

谷歌一下:

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

补充下概念:

1、普通索引

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

2、唯一索引

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

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

注:

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

php普通索引和唯一索引,mysql下普通索引和唯一索引的效率对比相关推荐

  1. mysql的left join和inner join的效率对比,以及如何优化

    一.前言 最近在写代码的时候,遇到了需要多表连接的一个问题,初始sql类似于: select * from a left join b on a.x = b.x left join c on c.y ...

  2. mysql带where的join加索引_MySQL索引分析和优化+JOIN的分类(转)

    join : 左右合併 inner join : 只顥示符合修件的資料列 (左右互相比對) left join : 顥示符合條件的右資料列及左邊不符合條件的資料列 (此時右邊的資料會以 NULL 顯示 ...

  3. MySQL的高阶学习:索引、B+树

    Mysql高频面试题(后端大数据面试必备)_mysql高级面试题_南潇如梦的博客-CSDN博客 1.索引 索引是一种数据结构,如果没有索引,查找一个数据就需要从第一页开始全局检索直至找到需要的数据,有 ...

  4. MySQL为什么使用B+树作为索引? 索引原理?

    目录 一.Mysql索引主要有两种结构:B+Tree索引和Hash索引 什么是索引 为什么要使用索引 举例说明使用索引的好处 数据库中使用什么数据结构作为索引 各种树的名字 平衡二叉树 为什么平衡二叉 ...

  5. mysql 数据舍取_mysql取舍索引

    mysql选择索引 1.尽量为用来搜索.分类或分组的数据列编制索引,不要为作为输出显示的数据列编制索引. 最适合有索引的数据列是那些在where子句中数据列,在联结子句中出现的数据列,或者是在Grou ...

  6. mysql 添加唯一索引_浅谈Mysql索引

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 我们都知道,数据库索引可以帮助我们更加快速的找出符合的数据,但是如果不使用索引,Mysql则会从第一条开始查询 ...

  7. mysql 建表时创建唯一索引

    Mysql建表与索引使用规范整理 一,设计表规范: MySQL建表,字段需设置为非空,需设置字段默认值: MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL: MySQL建表,如果 ...

  8. Mysql 唯一索引长度_关于mysql索引长度的相关内容总结

    MySQL优化之-索引具体代码分析:索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存 ...

  9. mysql中主键、普通索引、唯一索引和全文索引

    SQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录 开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录 ...

  10. Ubuntu10下MySQL搭建Amoeba系列(文章索引)

    一.前言(Introduction) 使用了Amoeba有一段时间了,发现官方博客:Amoeba使用指南有很多地方都是错误的,在我实战中给到一些错误的指示,所以我想写些在搭建的实战中给大家一点指引.欢 ...

最新文章

  1. fineUI表格控件各属性说明
  2. jQuery Mobile 笔记(1)- jQuery Mobile页面结构
  3. 拍摄中如何判断灰度等级_如何判断电力铁塔的电压等级?每个人都应知道
  4. 以太坊测试链环境node.js版本
  5. dockerfile nginx配置
  6. oracle中rownum和row_number()的区别
  7. LSTM(序列标注,自实现)
  8. modify sql_在SQL Server中使用JSON_MODIFY()修改JSON数据
  9. zipparameters 使用_zip4j的简单运用
  10. 计算机配置主板技术参数,i9-7900X/7920X配什么主板好?i9-7920X/7900X主板搭配与参数详解...
  11. 手把手教你反编译apk
  12. web前端开发面试题-基础篇
  13. Java—计算长方体、四棱锥的表面积和体积
  14. 数据分析学习笔记 2/28
  15. SAP 信息记录条件 无法维护多个条件
  16. java 线程 设计模式_Java多线程设计模式(四)
  17. mysql 实现over函数_mysql 中如何实现over 方法(开窗函数)
  18. python合并word_用Python实现Word多文档合并
  19. 开发者如何在 DoraHacks 上参加 Web3世界的 Hackathon 和 Grant
  20. 快速提升销售业绩,您需要懂得这些“潜规则”

热门文章

  1. Android TextView 中间添加划线与 底部添加划线
  2. 微信小程序模板template
  3. private关键字和构造方法
  4. 使用MS VS的命令来编译C++程序
  5. like模糊查询是否走索引
  6. 2022-2028年中国反射偏光膜行业市场研究及前瞻分析报告
  7. Python入门系列教程(三)列表和元组
  8. Session原理、安全以及最基本的Express和Redis实现
  9. linux定时器(crontab)实例
  10. 微信公众平台消息接口星标功能