当前位置: 首页 > news >正文

【随手记】MySQL单表访问方法

在MySQL查询优化器中,单表访问方法(Access Method)指的是查询时数据库如何从一个表中访问所需的数据。不同的访问方法适用于不同的查询场景,主要包括 constrefref_or_nullrangeindexall。这些方法从效率上依次递减,具体区别如下:

1. const

  • 定义const 访问方法用于当查询的某个列是主键或者唯一索引,并且查询条件是等值查询时。
  • 特点:MySQL 只需要读取一次即可确定结果,并且结果通常在优化阶段即已确定。因为主键或唯一索引是唯一的,所以只会返回一行结果。
  • 使用场景:查询使用了主键或唯一索引的等值查询。
  • 效率:非常高效,是单表访问中最快的方法。

示例

SELECT * FROM employees WHERE id = 1;  -- id 是主键

2. ref

  • 定义ref 是指 MySQL 使用了非唯一索引,并且查询条件是等值匹配。不同于 constref 可能会返回多行结果,因为非唯一索引允许多个记录具有相同的索引值。
  • 特点:查询条件中使用了非唯一索引的等值查询。MySQL 通过索引查找符合条件的多行记录,然后再通过聚簇索引访问实际的行数据。
  • 使用场景:当查询条件使用非唯一索引或者多列组合索引的最左列时,使用 ref 访问方法。
  • 效率:效率高,但不如 const,因为它可能需要扫描多个匹配的记录。

示例

SELECT * FROM employees WHERE department_id = 5;  -- department_id 是非唯一索引

3. ref_or_null

  • 定义ref_or_null 访问方法是 ref 的扩展,除了查找等值匹配的记录外,还会查找 NULL 值的记录。
  • 特点:用于当查询条件既包含等值匹配,又需要包含 NULL 的情况。MySQL 会先查找匹配的索引记录,然后查找 NULL 值的记录。
  • 使用场景:适用于某列既有具体值也允许 NULL 的查询。
  • 效率:效率较高,但比 ref 稍差,因为它需要额外查找 NULL 值。

示例

SELECT * FROM employees WHERE department_id = 5 OR department_id IS NULL;

4. range

  • 定义range 访问方法用于索引列上的范围查询。MySQL 使用索引扫描某个范围内的记录,例如使用 <, >, BETWEEN, IN 等操作符。
  • 特点:MySQL 通过索引确定符合条件的记录范围,然后再查找该范围内的数据行。相比 refrange 需要访问更多的记录,因为它不是精确匹配,而是扫描一个范围。
  • 使用场景:适用于范围查询的场景,如 ><BETWEENIN 等条件。
  • 效率:效率中等,视范围的大小而定。

示例

SELECT * FROM employees WHERE salary BETWEEN 4000 AND 6000;

5. index

  • 定义index 访问方法意味着 MySQL 需要全索引扫描,即扫描索引中的所有记录,而不查找表中的实际数据行。索引中的所有列都能够满足查询需求,因此不需要回表。
  • 特点:索引的所有信息都能满足查询,尤其是在覆盖索引的情况下,MySQL 可以只扫描索引,不需要访问表中的数据行。
  • 使用场景:常用于索引列能够满足查询的情况,不需要访问实际的行数据。
  • 效率:相对较低,因为索引扫描仍然涉及大量数据读取。

示例

SELECT name, salary FROM employees USE INDEX(salary_index);

6. all

  • 定义all 访问方法是指 MySQL 对表进行全表扫描,即逐行读取表中的每一行数据以找到匹配的记录。这是所有访问方法中最慢的一种,因为它要读取表的所有记录。
  • 特点all 通常出现在没有使用索引或查询条件没有涉及任何索引的情况下。
  • 使用场景:适用于没有索引的表,或者查询条件不符合任何索引时。
  • 效率:效率最低,通常应该尽量避免全表扫描,除非表非常小或者没有合适的索引。

示例

SELECT * FROM employees WHERE name = 'Alice';  -- 没有为 name 创建索引

总结:

  • const 是效率最高的访问方法,适用于主键或唯一索引的等值查询。
  • ref 适用于非唯一索引的等值查询,效率也很高。
  • ref_or_null 用于查询非唯一索引且包含 NULL 值的场景。
  • range 适用于范围查询,性能较好,但依赖于范围的大小。
  • index 执行全索引扫描,不需要回表,但涉及大量索引扫描。
  • all 是效率最低的全表扫描,应该尽量避免。

合理设计索引,选择合适的访问方法,可以显著提升数据库查询性能。

相关文章:

【随手记】MySQL单表访问方法

在MySQL查询优化器中&#xff0c;单表访问方法&#xff08;Access Method&#xff09;指的是查询时数据库如何从一个表中访问所需的数据。不同的访问方法适用于不同的查询场景&#xff0c;主要包括 const、ref、ref_or_null、range、index 和 all。这些方法从效率上依次递减&am…...

机器学习:情感分析的原理、应用场景及优缺点介绍

一、情感分析算法概述 情感分析是自然语言处理中的一个重要任务&#xff0c;主要用于判断文本中所包含的情感倾向&#xff0c;如正面、负面或中性。 二、基于词典的情感分析算法 原理 词典构建&#xff1a;首先需要构建一个情感词典。这个词典包含了一系列带有情感倾向的词汇…...

基于SSM的医院药品管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

特征融合篇 | YOLOv10 引入动态上采样模块 | 超过了其他上采样器

本改进已集成到YOLOv8-Magic 框架 论文名称:《Learning to Upsample by Learning to Sample》 论文地址:https://arxiv.org/abs/2308.15085 代码地址:https://github.com/tiny-smart/dysample 我们提出了 DySample,一种超轻量级且有效的动态上采样器。尽管最近基于内核的…...

【Linux系列】写入文本到文件

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【踩坑随笔】Tensorflow-GPU训练踩坑

一个无语的坑&#xff0c;4060单卡训练&#xff0c;8G内存本来就不够&#xff0c;还没开始训练就已经爆内存了&#xff0c;但是居然正常跑完了训练&#xff0c;然后一推理发现结果就是一坨。。。往回翻日志才发现原来中间有异常。 首先解决第一个问题&#xff1a;Could not lo…...

【云岚到家】-day07-4-实战项目-优惠券活动-项目准备

【云岚到家-即刻体检】-day07-4-实战项目-优惠券活动-活动管理 1 模块需求分析1.1 业务流程1.2 界面原型1.3 业务模块 2 模块设计2.1 数据流2.2 表结构设计2.2.1 优惠券活动表设计2.2.2 优惠券表设计2.2.3 优惠券核销表2.2.4 优惠券退回表 2.3 创建数据库2.4 创建工程 1 模块需…...

axios的使用

在 Vue 项目中&#xff0c;封装 Axios 并实现加密、重复请求优化、请求取消、页面切换时取消未完成的请求、以及区分上传和下载操作是非常常见的需求。下面将逐一讲解这些需求的实现方式。 1. Axios 的基本封装 首先&#xff0c;我们可以将 Axios 封装到一个服务层中&#xf…...

Ubuntu 使用命令克隆和恢复SD卡

因为平常我需要做很多张开发板的出货卡&#xff0c;测试卡&#xff0c;那么我需要将备份下来文件&#xff0c;方便后续管理&#xff0c;这里时候需要用到Ubuntu上面的命令来克隆镜像和恢复镜像到SD卡上 先查询自己的SD卡是在sdx&#xff0c;以我的为例子&#xff0c;为sdb 备…...

Java 小游戏《超级马里奥》

文章目录 一、效果展示二、代码编写1. 素材准备2. 创建窗口类3. 创建常量类4. 创建动作类5. 创建关卡类6. 创建障碍物类7. 创建马里奥类8. 编写程序入口 一、效果展示 二、代码编写 1. 素材准备 首先创建一个基本的 java 项目&#xff0c;并将本游戏需要用到的图片素材 image…...

go语言defer详解

什么是defer&#xff1f;为什么需要defer&#xff1f;怎样合理使用defer?defer进阶 defer的底层原理是什么&#xff1f;利用defer原理defer命令的拆解defer语句的参数闭包是什么&#xff1f;defer配合recover后记参考资料 什么是defer&#xff1f; defer是Go语言提供的一种用…...

【C语言】循环中断break

在循环使用过程中&#xff0c;可能遇到某些情况需要终止循环。比如按座位查找一位学生&#xff0c;循环查找&#xff0c;找到时可以直接停止。后续的循环将不再执行。 break;只跳出一层循环 例子中的素数判断&#xff0c;查找到根号n停止&#xff1a;一个合数等于两个数的乘积…...

centos ping能通但是wget超时-解决

问题截图&#xff1a; 域名解析地址为IPV6地址&#xff0c;建议您调整IPV4优先级之后&#xff0c;再尝试访问&#xff0c;请参考Linux系统IPv4/IPv6双栈接入优先使用IPv4设置&#xff1a;移动云帮助中心 实操截图&#xff1a;...

SDIO - DWC MSHC 电压切换和频率切换

背景 我们的sdio访问sd card过去一直跑在低频上&#xff0c;HS50M。前段时间给eMMc添加了HS200模式&#xff0c;eMMc的总线模式定义是这样的&#xff1a; 可以看到1.8V的IO 电压可以支持所有模式&#xff0c;我们过去的芯片&#xff0c;由硬件部门放到evb上&#xff0c;其IO …...

EI-CLIP 深度理解 PPT

系列文章目录 文章目录 系列文章目录 在电子商务产品的跨模态检索中&#xff0c;电子商务图像和电子商务语言都有许多独特的特点。如图所示&#xff0c;一个电子商务产品图片通常只包含一个简单的场景&#xff0c;有一个或两个前景物体和一个普通的背景。同时&#xff0c;电子商…...

leetcode力扣刷题系列——【最小元素和最大元素的最小平均值】

题目 你有一个初始为空的浮点数数组 averages。另给你一个包含 n 个整数的数组 nums&#xff0c;其中 n 为偶数。 你需要重复以下步骤 n / 2 次&#xff1a; 从 nums 中移除 最小 的元素 minElement 和 最大 的元素 maxElement。 将 (minElement maxElement) / 2 加入到 aver…...

【线性回归分析】:基于实验数据的模型构建与可视化

目录 线性回归分析&#xff1a;基于实验数据的模型构建与可视化 1. 数据准备 2. 构建线性回归模型 3. 可视化 数据分析的核心 构建预测模型 应用场景 预测模型中的挑战 结论 线性回归分析&#xff1a;基于实验数据的模型构建与可视化 在数据分析领域&#xff0c;线性…...

CountUp.js 实现数字增长动画 Vue

效果&#xff1a; 官网介绍 1. 安装 npm install --save countup.js2. 基本使用 // template <span ref"number1Ref"></span>// script const number1Ref ref<HTMLElement>() onMounted(() > {new CountUp(number1Ref.value!, 9999999).sta…...

设计模式大全

1. 策略模式 什么是策略模式&#xff1f; 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以互换。策略模式使得算法可以独立于使用它的客户端而变化。通过使用策略…...

redis IO多路复用机制

目录 一、五种 I/O 模型 1.阻塞IO&#xff08;Blocking IO&#xff09; 2.非阻塞IO&#xff08;Nonblocking IO&#xff09; 3.IO多路复用&#xff08;IO Multiplexing&#xff09; 通知的方式 select模式 poll模式 epoll模式 4.信号驱动IO&#xff08;Signal Driven …...

从FLOPS到TOPS:深入解析算力单位及其在AI芯片中的应用

1. 算力单位&#xff1a;从FLOPS到TOPS的进化史 第一次接触FLOPS这个术语时&#xff0c;我正试图比较两款显卡的性能。当时完全被各种"FLOP"搞晕了头&#xff0c;直到后来在实际项目中调试AI模型时&#xff0c;才真正理解了这些算力单位背后的意义。FLOPS&#xff0…...

RetDec反编译工具全攻略:从入门到精通的逆向工程实践指南

RetDec反编译工具全攻略&#xff1a;从入门到精通的逆向工程实践指南 【免费下载链接】retdec RetDec is a retargetable machine-code decompiler based on LLVM. 项目地址: https://gitcode.com/gh_mirrors/re/retdec 一、认知层&#xff1a;解密RetDec的核心价值与技…...

动态库路径配置实战:解决openssl symbol lookup error的深层解析

1. 问题背景&#xff1a;当openssl升级遇上symbol lookup error 上周我在升级服务器上的openssl时&#xff0c;遇到了一个典型的动态库问题。系统原本使用的是Ubuntu 20.04自带的openssl 1.1.1f&#xff0c;但项目需要用到1.1.1k的新特性。像大多数开发者一样&#xff0c;我选择…...

惊艳效果!立知lychee-rerank-mm图文匹配案例分享,看看它有多准

惊艳效果&#xff01;立知lychee-rerank-mm图文匹配案例分享&#xff0c;看看它有多准 1. 为什么我们需要多模态重排序 在信息爆炸的时代&#xff0c;我们每天都会遇到这样的场景&#xff1a;搜索引擎返回几十个结果&#xff0c;但真正相关的可能只有两三个&#xff1b;电商平…...

C++11三大核心特性深度解析:类型特征、时间库与原子操作

C11三大核心特性深度解析&#xff1a;类型特征、时间库与原子操作 引言 C11标准的发布标志着C语言进入了现代编程的新纪元。在众多令人瞩目的新特性中&#xff0c;类型特征&#xff08;<type_traits>&#xff09;、时间库&#xff08;&#xff09;和原子操作&#xff0…...

终极远程管理解决方案:MobaXterm中文版完整使用指南

终极远程管理解决方案&#xff1a;MobaXterm中文版完整使用指南 【免费下载链接】Mobaxterm-Chinese Mobaxterm simplified Chinese version. Mobaxterm 的简体中文版. 项目地址: https://gitcode.com/gh_mirrors/mo/Mobaxterm-Chinese 你是不是经常在多个远程工具之间来…...

Ostrakon-VL-8B与ComfyUI工作流结合:可视化视觉分析流程搭建

Ostrakon-VL-8B与ComfyUI工作流结合&#xff1a;可视化视觉分析流程搭建 1. 引言&#xff1a;当视觉大模型遇上可视化编程 如果你玩过AI绘画&#xff0c;大概率听说过ComfyUI。这个工具把复杂的AI图像生成过程&#xff0c;变成了一个个可以拖拽、连接的“积木块”&#xff0c…...

告别拼接URL!手把手教你封装HarmonyOS的POST请求工具类

告别拼接URL&#xff01;手把手教你封装HarmonyOS的POST请求工具类 在HarmonyOS应用开发中&#xff0c;网络请求是每个开发者都无法绕开的核心功能。很多从Android转战HarmonyOS的开发者会发现&#xff0c;原本在Android中通过Retrofit等框架轻松实现的POST请求&#xff0c;在H…...

告别VOC数据集:手把手教你用BDD100K训练PyTorch版MobileNetV3-SSD(含数据转换脚本)

从BDD100K到实战&#xff1a;轻量级目标检测模型MobileNetV3-SSD的完整训练指南 在计算机视觉领域&#xff0c;目标检测一直是工业界和学术界关注的焦点。随着边缘计算和移动设备的普及&#xff0c;如何在资源受限的环境中部署高效的目标检测模型成为开发者面临的新挑战。本文将…...

SiameseUIE Vue前端开发:交互式信息抽取平台构建

SiameseUIE Vue前端开发&#xff1a;交互式信息抽取平台构建 如果你用过一些信息抽取工具&#xff0c;可能会遇到这样的体验&#xff1a;要么是命令行黑框框&#xff0c;要么是简陋的网页界面&#xff0c;输入一段文本&#xff0c;返回一堆看不懂的JSON数据。整个过程冷冰冰的…...