首页 > 其他分享 >04 | 05 深入浅出索引

04 | 05 深入浅出索引

时间:2023-06-25 22:13:35浏览次数:46  
标签:04 05 深入浅出 查询 回表 索引 InnoDB 数据 主键

04 | 05 深入浅出索引

在 MySQL 中,索引是在存储引擎层实现的,所以并没有统一的索引标准,即不同存储引擎的索引的工作方式并不一样。而即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同。

索引常见模型

模型 特点 场景 使用
哈希表 键值存储数据 等值查询 Memcached 及其他一些 NoSQL 引擎
有序数组 有序数组存储数据 等值查询和范围查询
B+树 适配磁盘的的访问模式,可以减少单词查询磁盘的访问次数 广泛应用在数据库引擎 InnoDB
跳表 Redis
LSM树

平衡二叉树、B树、B+树、B*树 : https://zhuanlan.zhihu.com/p/27700617

InnoDB 的索引模型

在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。InnoDB 使用了 B+ 树索引模型,所以数据都是存储在 B+ 树中的。

每一个索引在 InnoDB 里对应一颗 B+ 树。

索引类型又分为主键索引(聚簇索引)和非主键索引(二级索引)

  • 主键索引:叶子节点存都是整行数据
  • 非主键索引:叶子节点内容是主键的值。

基于主键索引和普通索引的查询的区别?

普通索引查询方式,需要先扫描普通索引的 B+ 树,找打对应的主键 ID, 再到 ID 索引树搜索一次,这个过程称为回表。

覆盖索引:索引拥有搜索需要的数据,无需回表。

最左前缀原则

B+ 树这种索引结构,可以利用索引的 "最左前缀",来定位记录。

在建立联合索引时,如何安排索引内字段顺序。

原则1:如果可以通过调整顺序,可以少维护一个索引,那么这个顺序往往就是需要优先考虑采用的。

原则2:空间。

索引下推

在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

例子:name like 'k%' and age >10, 存在联合索引 (name,age),

Mysql 5.6 之前,会对匹配的数据进行回表查询。

Mysql 5.6 之后,会先过滤掉 age < 10 的数据,再进行回表查询,减少回表率,提升检索速度。

索引维护

B+ 树为了维护索引的有序性,在插入新值和删除数据时需要做必要的维护。

页分裂:在新增数据时,如果相邻两个数据页已经满了,需要申请一个新的数据页,然后挪动部分数据过去。

页分裂会降低插入的性能和数据页的利用率。

页合并:当相邻的两个页由于删除了数据,利用率很低之后,会将数据也做合并。

自增主键与业务主键的区别:

  • 性能

    • 自增主键的插入,往往是追加操作,不需要挪动数据,不易造成页分裂问题。
    • 业务主键无法保证有序插入,需要大量挪动数据,造成页分裂,写成本太高,影响性能,降低数据页利用率。
  • 空间

    • 主键长度越小,普通索引的叶子节点也就越小,占用空间越小。

标签:04,05,深入浅出,查询,回表,索引,InnoDB,数据,主键
From: https://www.cnblogs.com/sun-yanglu/p/17504107.html

相关文章

  • 油烟机语音方案:NV040D语音芯片,支持MCU输入UART指令
    随着人们生活水平的提高和厨房使用频率的增加,油烟机成为现代家庭生活中必不可少的一种家用电器,而语音智能化技术的发展也使得油烟机功能更加智能化。九芯电子的NV040D语音芯片是一种具备MCU输入UART指令功能的专业语音芯片,可以广泛应用于油烟机的语音控制领域。本文将介绍NV040D语......
  • 油烟机语音方案:NV040D语音芯片,支持MCU输入UART指令
    随着人们生活水平的提高和厨房使用频率的增加,油烟机成为现代家庭生活中必不可少的一种家用电器,而语音智能化技术的发展也使得油烟机功能更加智能化。九芯电子的NV040D语音芯片是一种具备MCU输入UART指令功能的专业语音芯片,可以广泛应用于油烟机的语音控制领域。本文将介绍NV040D语......
  • 车规级耐高温BLE5.2协议串口转蓝牙模块E104-BT53C3产品简介
    蓝牙耐高温车规级BLE5.2蓝牙协议串口转蓝牙模块E104-BT53C3新品即将上架:蓝牙模块通信接口:UART串口通信蓝牙模块工作频率:2402~2480MHz车规级蓝牙模块蓝牙协议:BLE 5.2通信距离:170m天线接口:PCB产品尺寸:23*16mm产品简介:E104-BT53C3耐高温车规级蓝牙模块是一款基于蓝牙协议5.2版本的串......
  • 车规级耐高温BLE5.2协议串口转蓝牙模块E104-BT53C3产品简介
    蓝牙耐高温车规级BLE5.2蓝牙协议串口转蓝牙模块E104-BT53C3新品即将上架:蓝牙模块通信接口:UART串口通信蓝牙模块工作频率:2402~2480MHz车规级蓝牙模块蓝牙协议:BLE 5.2通信距离:170m天线接口:PCB产品尺寸:23*16mm产品简介:E104-BT53C3耐高温车规级蓝牙模块是一款基于蓝牙协议5.2......
  • ubuntu 22.04网络连不上,无法复制粘贴解决
    小白安装ubuntu记录 1:首先ubuntu连上网右上角会有一个标志 2:刚安装ubuntu没有联网时。可以在网上找一下教程,配置这个网络编辑器,这个页面在vm虚拟机的编辑➡虚拟网络编辑器3:然后vm虚拟机的头部导航栏选择:虚拟机→设置→网络适配器改成自定义模式,选择刚刚在网络编辑器添加的......
  • Selenium基础:鼠标操作 05
    *需要导入ActionChains类fromselenium.webdriver.common.action_chainsimportActionChains1、鼠标右击context_click(element)方法fromseleniumimportwebdriver#导入actionchainsfromselenium.webdriver.common.action_chainsimportActionChainsimporttime......
  • 【雕爷学编程】Arduino动手做(127)---2004A LCD液晶屏模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • TNS-03505 名称无法解析
    TNS-03505名称无法解析问题现象:[oracle@db01admin]$tnspingpriTNSPingUtilityforLinux:Version11.2.0.4.0-Productionon15-JUN-201521:57:52Copyright(c)1997,2013,Oracle.Allrightsreserved.Usedparameterfiles:TNS-03505:Failedtoresolve......
  • 04、文件属性详述
    一、概述文件属性信息组成#1、文件详细信息详解134319695-rw-------.1rootroot1.7KDec812:08anaconda-ks.cfg134319707-rw-r--r--1rootroot12Dec1311:48index#2、inode编号Linux系统中文件的唯一编号,就相当于身份证号。#3、硬链......
  • vue项目本地启动history路由模式刷新页面404
    背景:之前一直用hash模式,改成history模式后刷新页面404解决:vue.config.js中publicPath:"/"如果是线上服务则还需要后端修改一些配置,见链接点击查看......