广告
返回顶部
首页 > 资讯 > 数据库 >MySQL普通索引和唯一索引的深入讲解
  • 648
分享到

MySQL普通索引和唯一索引的深入讲解

2024-04-02 19:04:59 648人浏览 独家记忆
摘要

场景 1、维护一个市民系统,有一个字段为身份证号 2、业务代码能保证不会写入两个重复的身份证号(如果业务无法保证,可以依赖数据库的唯一索引来进行约束) 3、常用sql查询语句:SELECT n

场景

1、维护一个市民系统,有一个字段为身份证号

2、业务代码能保证不会写入两个重复的身份证号(如果业务无法保证,可以依赖数据库的唯一索引来进行约束)

3、常用sql查询语句:SELECT name FROM CUser WHERE id_card = 'XXX'

4、建立索引

  • 身份证号比较大,不建议设置为主键
  • 从性能角度出发,选择普通索引还是唯一索引?

假设字段k上的值都不重复

MySQL普通索引和唯一索引的深入讲解

查询过程

1、查询语句:SELECT id FROM T WHERE k=5

2、查询过程

  • 通过B+树从树根开始,按层搜索到叶子节点,即上图中右下角的数据页
  • 在数据页内部通过二分法来定位具体的记录

3、针对普通索引

  • 查找满足条件的第一个记录(5,500),然后查找下一个记录,直到找到第一个不满足k=5的记录

4、针对唯一索引

  • 由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续查找

性能差异

1、性能差异:微乎其微

2、InnoDB的数据是按照数据页为单位进行读写的,默认为16KB

3、当需要读取一条记录时,并不是将这个记录本身从磁盘读出来,而是以数据页为单位进行读取的

4、当找到k=5的记录时,它所在的数据页都已经在内存里了

5、对于普通索引而言,只需要多一次指针寻找和多一次计算 – CPU消耗很低

  • 如果k=5这个记录恰好是所在数据页的最后一个记录,那么如果要取下一个记录,就需要读取下一个数据页
  • 概率很低:对于整型字段索引,一个数据页(16KB,compact格式)可以存放大概745个值

change buffer

1、当需要更新一个数据页时,如果数据页在内存中就直接更新

2、如果这个数据页不在内存中,在不影响数据一致性的前提下

  • InnoDB会将这些更新操作缓存在change buffer
  • 不需要从磁盘读入这个数据页(随机读)
  • 在下次查询需要访问这个数据页的时候,将数据页读入内存
    然后执行change buffer中与这个数据页有关的操作(merge)

3、change buffer是可以持久化的数据,在内存中有拷贝,也会被写入到磁盘上

4、将更新操作先记录在channge buffer,减少随机读磁盘,提升语句的执行速度

5、另外数据页读入内存需要占用buffer pool,使用channge buffer能避免占用内存,提高内存利用率

6、change buffer用到是buffer pool里的内存,不能无限增大,控制参数innodb_change_buffer_max_size


# 默认25,最大50
Mysql> SHOW VARIABLES LIKE '%innodb_change_buffer_max_size%';
+-------------------------------+-------+
| Variable_name   | Value |
+-------------------------------+-------+
| innodb_change_buffer_max_size | 25 |
+-------------------------------+-------+
您可能感兴趣的文档:

--结束END--

本文标题: MySQL普通索引和唯一索引的深入讲解

本文链接: https://www.lsjlt.com/news/51448.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL普通索引和唯一索引的深入讲解
    场景 1、维护一个市民系统,有一个字段为身份证号 2、业务代码能保证不会写入两个重复的身份证号(如果业务无法保证,可以依赖数据库的唯一索引来进行约束) 3、常用SQL查询语句:SELECT n...
    99+
    2022-10-18
  • MySQL 普通索引和唯一索引的区别详解
    1 概念区分 普通索引和唯一索引 普通索引可重复,唯一索引和主键一样不能重复。 唯一索引可作为数据的一个合法验证手段,例如学生表的身份证号码字段,我们人为规定该字段不得重复,那么就使用唯一索引。(一般...
    99+
    2022-05-25
    MySQL 普通索引 MySQL 唯一索引
  • MySQL唯一索引和普通索引选哪个?
    想象这样一个场景,在设计一张用户表时,每人的身份证号是唯一的,需要搜索。但由于身份证号字段较大,不好将其作为主键。在业务代码已经保证插入身份证唯一的情况下,可以选择建立唯一索引和普通索引,这时该如何选择呢?接下来,将...
    99+
    2022-05-28
    MySQL 唯一索引 MySQL 普通索引
  • 普通索引和唯一索引的执行过程
    这里普通索引和唯一索引的情况有所不同 查询过程 对于普通索引来说,查找到满足条件的第一个记录后,需要查找下一个记录, 直到碰到第一个不满足条件的记录。 对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索 ...
    99+
    2016-04-05
    普通索引和唯一索引的执行过程
  • MySQL---单列索引(包括普通索引、唯一索引、主键索引)、组合索引、全文索引。
    1. 索引 索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索 引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的 时间就越多,如果表中查询的列有一个索引,MySQL...
    99+
    2023-09-21
    数据库 mysql sql
  • Mysql 索引(三)—— 不同索引的创建方式(主键索引、普通索引、唯一键索引)
    了解了主键索引的底层原理,主键索引其实就是根据主键字段建立相关的数据结构(B+树),此后在使用主键字段作为条件查询时,会直接根据主键查找B+树的叶子结点。除了主键索引外,普通索引和唯一键索引也是如此,只不过普通索引要稍微绕一点,下面会具体介...
    99+
    2023-09-12
    mysql 数据库 java
  • 普通索引与唯一索引在MySQL 中有什么区别
    这篇文章给大家介绍普通索引与唯一索引在MySQL 中有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 概念区分普通索引和唯一索引普通索引可重复,唯一索引和主键一样不能重复。 唯一索引可作为数据的一个合法验证手...
    99+
    2023-06-06
  • mysql联合索引和普通索引的区别
            MySQL中,联合索引和普通索引都是用于加速查询的索引类型。它们之间的区别在于索引的列数和列的顺序。         普通索引只对单个列进行索引,而联合索引则同时对多个列进行索引,这些列可以按照特定的顺序组合在一起。例如,可...
    99+
    2023-09-07
    mysql 数据库 java
  • MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引是什么
    今天小编给大家分享一下MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章...
    99+
    2023-04-21
    mysql
  • MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引详细介绍
    目录一、索引类型二、聚簇索引和非聚簇索引三、覆盖索引四、联合索引最左前缀匹配原则索引下推五、唯一索引一、索引类型 索引根据底层实现可分为B-Tree索引和哈希索引,大部分时候我们使用的都是B-Tree索引,因为它良好的性...
    99+
    2023-04-19
    MySQL索引 MySQL聚簇索引 MySQL非聚簇索引 MySQL联合索引 MySQL唯一索引
  • MySQL索引设计原则深入分析讲解
    哪些情况适合创建索引? 字段的数值有唯一性的限制 索引本身可以起到约束的作用,比如唯一索引,主键索引都是可以起到唯一性约束的,因此在我们的数据表中如果某个字段是唯一性的,就可以直接创...
    99+
    2023-01-02
    MySQL索引设计原则 MySQL索引
  • 如何解决MySQL批量插入和唯一索引问题
    这篇文章主要介绍了如何解决MySQL批量插入和唯一索引问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySQL批量插入问题在开发项目时,...
    99+
    2022-10-18
  • mysql唯一索引和主键的区别是什么
    本篇内容介绍了“mysql唯一索引和主键的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • 通过唯一索引S锁与X锁来了解MySQL死锁套路
    在初学者从源码理解MySQL死锁问题中介绍了使用调试 MySQL  源码的方式来查看死锁的过程,这篇文章来讲讲一个常见的案例。 这次我们讲一段唯一索引 S 锁与 X 锁的爱恨情仇 我们来看一个简化...
    99+
    2022-10-18
  • 详解MySQL的字段默认null对唯一索引的影响
    目录正文看一下为何唯一索引为影响insert速度mysql版本:在docker中启动一个mysql假设只存在邮箱注册:insert数据经验正文 在日常业务开发中,会经常遇到需要保证唯一性的数据业务,如用户注册业务。一般注...
    99+
    2022-09-23
  • MySQL和Oracle中的唯一性索引的差别是怎样的
    本篇文章给大家分享的是有关MySQL和Oracle中的唯一性索引的差别是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  &...
    99+
    2022-10-19
  • 深入解析MySQL索引的原理与优化策略
    目录索引的概念索引的原理索引的类型索引的使用索引的使用方式注意事项索引优化技巧索引的概念 mysql索引是一种用于加速数据库查询的数据结构,它类似于书籍的目录,能够快速指导我们找到需要的信息。MySQL索引可以根据一定的...
    99+
    2023-03-31
    解析MySQL索引原理和优化策略 MySQL索引原理 MySQL优化策略
  • GBase 8s数据库主键约束、唯一约束和唯一索引的区别解析
    主键约束(PRIMARY KEY) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键,一个表上仅只能有一个主键;不建议更新主键;主键列上没有任何两行具有相同值(即重复值)...
    99+
    2022-11-13
  • 深入了解MySQL中索引优化器的工作原理
    目录本文导读一、mysql 优化器是如何选择索引的1、MySQL数据库组成2、MySQL数据库成本计算二、MySQL查询成本三、SELECT 执行过程总结本文导读 本文将解读MySQL数据库查询优化器(CBO)的...
    99+
    2022-11-09
  • 深入了解PHP Laravel框架索引机制的优点和缺点。
    PHP Laravel框架是一款流行的PHP框架,它具有强大的功能和丰富的插件,使得开发者可以更加高效地构建Web应用程序。其中,索引机制是其重要的特性之一。在本文中,我们将深入了解PHP Laravel框架索引机制的优点和缺点,并演示一些...
    99+
    2023-09-23
    laravel 索引 框架
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作