mysql索引为什么提高查询速度(底层原理)

一、索引原理图

二、索引数据存储到硬盘而不是内存?

|-----------|---------|
| 硬盘 | 内存 |
| 成本低 | 成本高 |
| 容量大 | 容量小 |
| 读写速度一般 | 读取速度快 |
| 断电后数据永久存储 | 断电后数据清空 |

三、硬盘数据为什么要读取到内存?为啥不直接读取硬盘

1、将数据直接从硬盘读取可能会导致较长的等待时间,影响系统的响应速度

2、将数据读取到内存中,可以充分利用内存的高速读写能力,加快数据的访问速度

3、通过将数据缓存到内存中,可以减少对硬盘的频繁读写,降低硬盘的负载,延长硬盘的使用寿命

四、为什么要分块读取?

1、减少硬盘寻道时间:硬盘的读取速度相对较慢,将数据分成多个块进行读取,可以减少硬盘进行寻道的次数

2、提高数据传输效率:硬盘数据的读取通常是通过DMA(直接内存访问)技术进行的,而DMA传输的单位是块。将数据分成多个块进行读取,可以充分利用DMA的高效传输能力

3、避免内存浪费:将数据分块读取可以避免一次性将大量数据加载到内存中,从而避免浪费内存资源。同时,分块读取也可以更好地适应内存的大小限制

五、索引提高查询效率本质,

减少IO次数和量

1、减少数据读取量:索引更快地定位到需要的数据行,从而减少了需要扫描的数据量,减少IO次数

2、利用索引覆盖:索引覆盖是指查询语句只需要通过索引就能够取得需要的数据,而无需再次访问数据行

3、顺序访问:利用索引的有序性,进行顺序访问,减少磁盘IO的随机访问

相关推荐
李兆龙的博客几秒前
从一到无穷大 #101:SSD 的工作原理——从 NAND 到数据库读写
数据库·ssd·存储
吹什么轩2 分钟前
MySQL 内置函数全景:日期 / 字符串 / 数学 / 其他,一次讲透(附索引杀手排查)
java·数据库·面试
开开心心就好3 分钟前
证件照排版打印工具,免费可自定义尺寸
服务器·开发语言·算法·随机森林·pdf·音视频·散列表
CS创新实验室7 分钟前
改了模型,数据库为什么能自动跟上?——Django 迁移(migrations)的底层
数据库·django·sqlite
我是高手高手高高手9 分钟前
宝塔 PHP多版本,切换PHP默认版本
开发语言·php
CodeYp201910 分钟前
第16讲:set 和 map 的使用
开发语言·c++·set·map
物联网老王11 分钟前
第05篇-Agent 连不上工具?MCP 就是那根“USB-C”
开发语言·人工智能·ai·aigc·ai编程
编码追梦人17 分钟前
基于 ESP32-S3 的便携式多参数环境监护仪设计:从硬件选型到 FreeRTOS 多任务落地
数据库·单片机·嵌入式硬件·mongodb·esp32·freertos·低功耗设计
sunburn-22 分钟前
数据库增删改查:从 SQL 基础到实践要点
java·数据库·mysql
誰能久伴不乏3 小时前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite