mysql中InnoDB索引与MyISAM索引

mysql索引

InnoDB 索引存储

主键索引(聚簇索引)

  • 定义:主键索引是 InnoDB 存储引擎的聚簇索引,它决定了表中数据的物理存储顺序。每个 InnoDB 表都有一个且仅有一个聚簇索引。
  • 存储:主键索引的叶子节点直接包含表的数据行。这意味着数据行按照主键索引的顺序物理存储在磁盘上。
  • 特点:
    • 数据和索引紧密关联:数据行和索引项紧密关联,优化了基于主键的查询。
    • 唯一性:主键必须是唯一的,且不能为 NULL。

二级索引(辅助索引)

  • 定义:二级索引是用于快速查找非主键列的索引。它们不是聚簇索引,因此叶子节点不包含完整的数据行。
  • 存储:二级索引的叶子节点包含索引列的值对应行的主键值。这允许数据库通过二级索引快速找到主键,然后使用主键在聚簇索引中找到完整数据行。
  • 特点:
    • 支持多列索引:二级索引可以包含多个列。
    • 查询优化:通过二级索引可以优化非主键列的查询。
    • 回表操作:当需要访问非主键列的完整数据时,需要执行回表操作,即使用二级索引中的主键值在聚簇索引中查找数据行。

覆盖索引

  • 定义:覆盖索引是一个索引包含了查询中所需的全部列,因此查询可以直接从索引中获取数据,而不需要访问实际的数据行。

    注意这里一定是一个索引

    如果查询中所需的三个列,它们各自都有索引,这个查询也不算覆盖索引查询。

    因为数据库在执行查询时,不能仅通过一个索引来获取 ABC 的值。数据库可能需要使用索引 idx_A 来定位行,然后访问表来获取 BC 的值

    而如果是一个索引中包含了查询中所需的全部列的话:就不需要再去查询其他表了,因为此时索引中就已经有了全部所需信息。

    使用覆盖索引是也要注意 “最左前缀原则”。

    如果所需的全部列是A,C,但是有一个复合索引A,B,C,此时也不需要多余的回表查询,因为索引都包含所需数据。

  • 优点:

    • 减少磁盘I/O:避免了对数据行的访问,减少了磁盘I/O操作。
    • 提高查询性能:查询速度显著提高,因为不需要回表操作。
    • 创建:通过创建复合索引(也不一定是复合索引,一般是复合索引,可以确保索引覆盖查询中的所有列)。
    • 覆盖索引原理

MyISAM 索引

  • 定义:MyISAM 是 MySQL 的另一个存储引擎,它使用非聚簇索引。
  • 存储:MyISAM 的索引和数据是分开存储的。索引的叶子节点包含指向数据行的指针,而不是数据行本身。
  • 特点:
    • 性能优化:MyISAM 支持压缩索引,这可以减少索引文件的大小,提高磁盘空间的利用率。
    • 全文索引:MyISAM 支持全文索引,这在处理大量文本数据时非常有用。
    • 写操作效率:由于数据和索引分离,MyISAM 在写操作上通常比 InnoDB 更快。

总结来说,InnoDB 和 MyISAM 在索引的存储方式和内部操作上存在显著差异。InnoDB 的聚簇索引和二级索引设计使其更适合事务处理和多用户并发访问,而 MyISAM 的非聚簇索引和全文索引支持使其在特定的读密集型应用中表现更佳。覆盖索引是优化查询性能的重要手段,通过创建合适的索引,可以显著提高数据库的查询效率。

若有错误与不足请指出,关注DPT一起进步吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10152.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

测试-请求特定资源使用Postman工具(3)

目录 前言 实操 开发者工具 前言 介绍过,就不再介绍了,只需要知道它是一个网络请求的工具就行了 实操 开发者工具 这里我们还需要借助开发者工具来帮助我们进行资源的请求,这里用 百度一下 进行测试 如下是 百度一下 的首页 右键打开…

Foliate:沉浸式阅读!!!

项目简介 Foliate 是一款开源的电子书阅读器,专为现代操作系统设计,提供了优雅且实用的阅读体验。它支持多种电子书格式,包括 EPUB、Mobipocket、Kindle、FB2、CBZ 和 PDF,让用户能够以分页或滚动模式阅读。Foliate 允许用户自定义…

打包18款AI营销神器,批量运营项目收藏必备!

淘金的不如卖铲子的,AI工具的应用越来越普及,这也让很多原本淘金的人都来卖铲子。如果自己能有很好的铲子,自己也会淘金,就可以既能卖铲子赚钱,也能掏金赚钱。 还有两天就是双十一了,各种AI工具&#xff0…

【MyBatis源码】SQL 语句构建器AbstractSQL

文章目录 介绍org.apache.ibatis.jdbc.SQLSQL类使用示例SelectProvider搭配动态SQLAbstractSQL类源码分析 介绍 当我们需要使用Statement对象执行SQL时,SQL语句会嵌入Java代码中。SQL语句比较复杂时,我们可能会在代码中对SQL语句进行拼接,查…

Vue2进阶

1.el安装 官网地址 Element - The worlds most popular Vue UI frameworkElement,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库https://element.eleme.cn/#/zh-CN 安装 npm install element-ui -S 引入组件(在 main.js&#xf…

案例:三次锁定(下)

第二步: 在 Form1.cs 中完成以下代码 using Dome16_三次锁定.service; using Dome16_三次锁定.service.serviceimpl; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using Sys…

前端学习笔记—Vue3特性

一、 Vue3与Vite构建工具简介 image.png image.png image.png image.png Vite构建工具(其他的打包工具有webpack,grunt,gulp) image.png image.png 构建 二、创建Vue3项目 vite在TypeScript结合使用上,直接开箱即用&am…

iOS 去掉URL里面的百分号符号

遇到这个一段字符串 “publicId2030095197043302&publicBizTypeCONTENT_USER&chInfoch_life__chsub_Ndiscovery.featured&logoUrlhttps%3A%2F%2Fmdn.alipayobjects.com%2Fopen_content%2Fafts%2Fimg%2FA*_SUKQodfigcAAAAAAAAAAAAAfVx1AQ%2Foriginal&publicName…

node.js安装配置(Windows)

1、下载 CNPM Binaries Mirror 2、安装 3、验证 win R 进入cmd 4、配置环境变量 4.1、创建两个文件夹 4.2、安装目录进入cmd(配置全局属性) 配置两个命令: npm config set prefix "D:\liyunqing\nodejs\node_global"npm config set cache "D:\l…

jdbc中预防SQL攻击

目录 展示SQL攻击 举一个出现sql 攻击的例子 SQL攻击的原因 分析原因 阻止SQL攻击 PreparedStatement的含义 使用PreparedStatement的原因 步骤如下 注意 总结 展示SQL攻击 举一个出现sql 攻击的例子 假设我们在做登录业务时,思路是这样的: 首…

30.1 时序数据库TSDB的典型特点

本节重点介绍 : db-ranking网站对db进行排名时序数据特点时序数据库特点时序数据库遇到的挑战开源时间序列数据库 db-ranking 一个神奇的网站 https://db-engines.com/en/ranking 时序数据ranking https://db-engines.com/en/ranking/timeseriesdbms 排名方法 https://db-en…

14:00面试,14:06就出来了,问的问题过于变态了。。。

我从一家小公司转投到另一家公司,期待着新的工作环境和机会。然而,新公司的加班文化让我有些始料未及。虽然薪资相对较高,但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时,公司突然宣布了一则令人…

架构师之路-学渣到学霸历程-49

实现不同终端的跳转实验 今天分享一下: nginx的跳转:主要看你的访问是手机还是网页;于是就有这个跳转的功能; 1、基础的环境部署 安装好nginx(这里最好的就是干净的环境)创建两个server;用于…

RK3568笔记1:BootRom

BootRom是瑞芯微公司在生产的CPU时,存储在内部flash中的一段固件代码,用于初始化硬件和启动系统。 RK3568 处理器也具备 BootROM。这是存储在处理器内部的只读存储器 (ROM) 中的一段代码,通常是不可修改的,其主要功能是在设备加电…

DataWind将字符串数组拆出多行的方法

摘要: 可视化建模中先将字符串split为array再用explode(array)即可 可视化建模 进入“可视化建模”页面 1.1 新建任务 如果团队内没有可视化建模任务。请点击“新建任务”,输入名称并确定。 1.2 建立数据连接 在左边栏中选择“数据连接”&#xff0c…

2024年【电工(中级)】考试及电工(中级)考试报名

题库来源:安全生产模拟考试一点通公众号小程序 电工(中级)考试参考答案及电工(中级)考试试题解析是安全生产模拟考试一点通题库老师及电工(中级)操作证已考过的学员汇总,相对有效帮…

【韩老师零基础30天学会Java】02章

sublime Text中本身没有GBK编码,需要安装 要在sublime Text中设置编码为GBK,请按照以下步骤操作 打开Sublime Text编辑器,点击菜单栏中的“Preferences”(首选项)选项,找打Package Control选项。点击Package Control,随后搜索Inst…

Pytorch实现运动鞋识别

Pytorch实现运动鞋识别 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器:j…

老年人跌倒智能检测系统

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

Spring Boot原理全解析:如何让开发更轻松高效(二)-起步依赖、自动装配

通过这篇博客,读者将能够掌握 Spring Boot 中的配置优先级和 Bean 管理的核心原理,为开发更加高效、可维护的 Spring Boot 应用打下坚实的基础。 目录 前言 起步依赖 自动配置 概述 常见方案 概述 方案一 方案二 总结 前言 通过这篇博客&#xf…