MySQL索引(Index)

Index

数据库中的索引(Index)是一种数据结构,用于提高数据库查询性能和加速数据检索过程。索引可以看作是数据库表中某个或多个列的数据结构,类似于书中的目录,可以帮助数据库管理系统更快地定位和访问数据。它们是数据库优化的重要工具,特别是在处理大量数据时。

传统的Select搜索策略为:线性搜索,从数据集的开头开始,按顺序逐个比较每个元素,直到找到目标元素或者遍历完整个数据集。
而Index搜索策略为:B-Tree(平衡树)或者B+Tree。

B-Tree(平衡树)索引: B-Tree 是一种常见的索引数据结构,适用于范围查询和等值查询。B-Tree 索引在数据库中广泛使用,它保持树的平衡,使得在平均情况下,每次搜索都能在 O(log n) 时间内找到目标。
B+Tree(平衡加强树)索引: B+Tree 是 B-Tree 的变种,更适合数据库系统,特别是范围查询。B+Tree 的叶子节点形成一个有序链表,可以支持高效的范围查询操作。

执行 CREATE INDEX 语句可以为数据中某个字段构建索引:

 CREATE INDEX index_name ON table_name (column_name);-- 在这里,index_name 是索引的名称(唯一),table_name 是表的名称,column_name 是要创建索引的列名。show index from table_name ; -- 查看索引drop index index_name on table_name;--删除索引

另外需要注意,MySQL为了支持高速搜索,有一些字段或变量默认情况下会自动使用索引。

主键(Primary Key): 在创建表时指定的主键列会自动创建主键索引,确保该列的值唯一且非空。主键索引是一种特殊的唯一性索引,通常用于唯一标识表中的每一行数据。
唯一性约束(Unique Constraint): 在创建表时指定的唯一性约束会自动创建唯一性索引。唯一性索引确保该列的值在表中是唯一的,但允许包含空值。
外键(Foreign Key): 在创建外键时,被引用的列会自动创建索引,以加速连接操作。这个索引通常是 B-Tree 索引。
自动递增列(Auto-Increment Column): 在 MySQL 中,使用自动递增的整数值作为主键,例如 AUTO_INCREMENT 列,会自动创建 B-Tree 索引。

Index的优势与劣势

优势:
提高数据查询效率,降低数据的IO成本。
通过索引对数据进行排序,降低数据排序的成本,降低CPU消耗。

劣势:
索引会占用存储空间。
索引在大大提高查询效率的同时,也降低了insert,update,delete的效率。

B-Tree

B-Tree的结构:
在这里插入图片描述

每个节点可以存储多个Key(有n个key就有n个指针)
所有数据都存储在叶子节点,非叶子节点仅用于索引数据
叶子节点形成一个双向链表,便于数据的排序以及区间范围的查询。

如下是B-Tree查询的伪代码

function search_btree(node, key):// 在当前节点中查找 keyi = 1while i <= node.num_keys and key > node.keys[i]:i = i + 1// 如果 key 等于节点中的某个 key,返回找到的节点if i <= node.num_keys and key == node.keys[i]:return node// 如果是叶子节点,表示 key 不存在if node.is_leaf:return NULL// 否则,继续在相应子节点中查找else:read child_node from disk at node.children[i]return search_btree(child_node, key)

这个伪代码描述了 B-Tree 的查询操作。主要步骤包括:

在当前节点中查找给定的 key,找到一个最小的 i,使得 key 小于等于 node.keys[i]。
如果在当前节点中找到了 key,说明查询成功,返回当前节点。
如果在当前节点中未找到 key,且当前节点是叶子节点,表示 key 不存在,返回 NULL。
如果在当前节点中未找到 key,且当前节点不是叶子节点,进入相应的子节点,继续查找。

重复上述步骤,直到找到 key 或者到达叶子节点。
需要注意的是,B-Tree 的查询操作是一个递归过程,通过逐层查找直到叶子节点。这种策略可以在平均情况下保持 O(log n) 的时间复杂度,从而实现高效的数据检索。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux——KVM虚拟化

目录标题 虚拟化技术虚拟化技术发展案例KVM简介KVM架构及原理KVM原理KVM虚拟化架构/三种模式虚拟化前、虚拟化后对比KVM盖中盖套娃实验 虚拟化技术 通过虚拟化技术将一台计算机虚拟为多台逻辑计算机&#xff0c;在一台计算机上同时运行多个逻辑计算机&#xff0c;同时每个逻辑…

智安网络|零信任安全框架:保障数字化时代网络安全的最佳实践

随着数字化时代的快速发展&#xff0c;网络安全问题变得越来越突出。传统的安全防御模式已经不再适用于现代复杂的网络环境中。为了应对日益增长的网络威胁&#xff0c;零信任安全模式应运而生。 一、什么是零信任&#xff1f; 零信任是一种安全框架和哲学&#xff0c;它基于…

pytest的fixture梳理

fixture特性 夹具是在测试中用于提供共享资源、设置测试环境或模拟行为的工具。 1. 可以重复使用&#xff0c;多个用例可以使用同一个fixture 2. 一个测试用例可以使用多个装置 import pytest # Arrange pytest.fixture def first_entry():return "a"# Arrange pyt…

全新 – Amazon EC2 M1 Mac 实例

去年&#xff0c;在 re: Invent 2021 大会期间&#xff0c;我写了一篇博客文章&#xff0c;宣布推出 EC2 M1 Mac 实例的预览版。我知道你们当中许多人请求访问预览版&#xff0c;我们尽了最大努力&#xff0c;却无法让所有人满意。不过&#xff0c;大家现在已经无需等待了。我很…

postmarketOS

主步骤 #以下全程插入usb线 fastboot devices fastboot getvar all fastboot erase userdata fastboot erase system fastboot erase cachepmbootstrap init pmbootstrap installpmbootstrap flasher flash_rootfs --partition userdata pmbootstrap flasher flash_kernel…

java生成Excel表格

public HSSFWorkbook CreateJZZJSList() {// 绘制ExcelString fileName "自动分析详情";HSSFWorkbook wb new HSSFWorkbook();//创建工作相簿对象HSSFSheet sheet wb.createSheet(fileName); // --->创建了一个工作簿sheet.setDefaultRowHeight((short) 600);…

前端开发工具及环境配置

1.前端开发环境node npm环境配置 第一步&#xff1a;打开Download | Node.js (nodejs.org)下载&#xff0c;解压。 找到下载压缩包进行解压 解压到D盘目录下&#xff1a; 第二步&#xff1a;配置环境变量&#xff1a;右击此电脑点击属性进入高级系统设置 点击高级系统设置进入…

项目管理系统是什么?能干什么?有什么功能?一文看懂

阅读本文您可以了解&#xff1a;1、项目任务管理系统是什么&#xff1b;2、项目任务管理系统的作用&#xff1b;3、项目任务管理系统的功能 一、什么是项目任务管理 项目任务管理是指运用系统的理论方法&#xff0c;在有限的条件和资源下&#xff0c;对项目从开始到结束的全流…

Github下载任意版本的VsCode

下载历史版本VsCode(zip) 下载链接由三部分组成&#xff1a; 固定部分commit idVSCode-win32-x64-版本号.zip 固定部分&#xff1a; https://vscode.cdn.azure.cn/stable/ Commit id&#xff1a; 打开 vscode的GitHub&#xff1a;[https://github.com/microsoft/vscode/r…

(搜索) 剑指 Offer 13. 机器人的运动范围 ——【Leetcode每日一题】

❓剑指 Offer 13. 机器人的运动范围 难度&#xff1a;中等 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0c;它每次可以向左、右、上、下移动一格&#xff08;不能移动到方格外&#xff09;&…

shell脚本基础

目录 前言 一、概述 &#xff08;一&#xff09;、shell脚本基础概念 &#xff08;二&#xff09;、shell的类型 二、Shell变量 &#xff08;一&#xff09;、组成 1.变量名 2.变量值 &#xff08;二&#xff09;、类型 1.系统内置变量&#xff08;环境变量&#xff09; 2.自定…

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI转DP EDP方案设计

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI转DP EDP方案设计 LT8911EXB是MIPI DSI/CSI 转eDP转换芯片&#xff0c;ASL CS5523不需要改电路就可以直接PIN TO PIN替代与兼容LT8911EXB。 ASL CS5523与 LT8911EXB的功能与参数&#xff0c;用途方式以及封装方式和…

【题解】旋转数组的最小数字、比较版本号

文章目录 旋转数组的最小数字比较版本号 旋转数组的最小数字 题目链接&#xff1a;旋转数组的最小数字 解题思路1&#xff1a;遍历求最小值 代码如下&#xff1a; int minNumberInRotateArray(vector<int> rotateArray) {int min rotateArray[0];for(auto const&…

迪米特法则

迪米特法则&#xff0c;也称为最少知识原则&#xff08;Law of Demeter&#xff09;&#xff0c;是面向对象设计中的一个原则&#xff0c;旨在降低对象之间的耦合性&#xff0c;提高系统的可维护性和可扩展性。该原则强调一个类不应该直接与其它不相关的类相互交互&#xff0c;…

Android 控件截图保存本地并分享

目录 需求 需求分析 一、截图控件生成图片 二、将图片保存至本地 2.1 权限 2.2 保存图片 2.3 调用 三、分享 四、通过测试机型 需求 截图当前页面某个控件的内容&#xff0c;并且保存在本地&#xff0c;可分享。 需求分析 1.截图控件生成图片 2.保存至本地(需考虑版…

【SpringCloud】Ribbon定制化配置

文章目录 使用Ribbon自带负载均衡算法添加负载均衡算法ConfigurationRestTemplate使用上面负载均衡算法 自定义负载均衡算法负载均衡算法实现RestTemplate在Controller中使用该负载均衡算法ServiceIInstance解释 使用Ribbon自带负载均衡算法 添加负载均衡算法Configuration /…

实现矩阵地图与rviz地图重合

文章目录 一、rviz地图转换矩形地图(只能用于全局规划)二、在rviz上显示地图边界信息,可视化调整,实现重合(只能用于局部规划)一、rviz地图转换矩形地图(只能用于全局规划) 此方法矩形地图可能会与rviz地图不重合,通过改变偏移量x_offset,y_offset接近地图 可以将矩…

FL Studio for Windows-21.1.0.3713中文直装版功能介绍及系统配置要求

FL Studio 21简称FL水果软件,全称是&#xff1a;Fruity Loops Studio编曲&#xff0c;由于其Logo长的比较像一款水果因此&#xff0c;在大家更多的是喜欢称他为水果萝卜&#xff0c;FL studio21是目前最新的版本&#xff0c;这是一款可以让你的计算机就像是一个全功能的录音室&…

Docker Dockerfile Docker-compose学习笔记

文章目录 Centos环境下安装Docker配置镜像源 Windows环境下安装Docker配置镜像源 使用Dokcer镜像1.获取镜像2.查看镜像信息(1)列出镜像(2)镜像标签(3)镜像详细信息(4)镜像历史 3.搜索镜像4.删除和清理镜像(1)使用标签删除镜像(2)使用ID删除镜像(3)清理镜像 5.创建镜像(1)基于已…

基于SpringBoot和Freemarker的页面静态化

页面静态化能够缓轻数据库的压力&#xff0c;还能提高页面的并发能力&#xff0c;但是网页静态化是比较适合大规模且相对变化不太频繁的数据。 页面静态化在实际应用中还是比较常见的&#xff0c;比如博客详情页、新闻网站或者文章类网站等等。这类数据变化不频繁比较适合静态…