当前位置: 首页 > 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 …...

正式支持 Spring Boot 4、新增 Jackson3/Snack4 插件适配

目前最新版本 v1.45.0 已推送至 Maven 中央仓库 &#x1f389;&#xff0c;大家可以通过如下方式引入&#xff1a; <!-- Sa-Token 权限认证 --> <dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot4-starter</artifa…...

避坑指南:OpenClaw云端一键部署的5个关键配置,90%的人都踩过前3个

OpenClaw作为目前最火的开源AI智能体框架&#xff0c;凭借低代码、多模型兼容、全渠道对接&#xff08;飞书/钉钉/Telegram等&#xff09;的特性&#xff0c;已经成为个人开发者、中小团队搭建专属AI员工的首选方案。 各大云厂商也纷纷推出了OpenClaw一键部署镜像&#xff0c;号…...

新手福音:零基础在快马平台创建你的第一个口播智能体

今天想和大家分享一个特别适合编程新手的实战项目——在InsCode(快马)平台上创建一个旗博士口播智能体。这个项目不需要任何后端知识&#xff0c;用最基础的HTML和JavaScript就能实现&#xff0c;而且能让你直观感受到AI应用的开发流程。 项目整体思路 这个口播智能体的核心功能…...

5个步骤解决Android内核跨设备适配难题:AnyKernel3的定制化方案

5个步骤解决Android内核跨设备适配难题&#xff1a;AnyKernel3的定制化方案 【免费下载链接】AnyKernel3 AnyKernel, Evolved 项目地址: https://gitcode.com/gh_mirrors/an/AnyKernel3 在Android内核开发中&#xff0c;你是否曾遇到过为一款设备编译的内核无法在另一款…...

网站优化对企业营销有什么作用_SEO优化能带来哪些好处

网站优化对企业营销有什么作用_SEO优化能带来哪些好处 在当前数字化时代&#xff0c;企业的在线存在感已经成为衡量其市场竞争力的重要指标。在这种背景下&#xff0c;网站优化&#xff08;特别是搜索引擎优化&#xff0c;SEO&#xff09;不仅仅是一个技术细节&#xff0c;而是…...

如何构建 Flink SQL 任务的血缘分析

版本一&#xff1a;干燥苦涩、缺乏深度&#xff08;反面回答素材&#xff09;面试者语气&#xff1a;&#xff08;机械地背诵&#xff0c;没有眼神交流&#xff0c;缺乏实践细节&#xff09;“关于 Flink SQL 的血缘分析&#xff0c;我认为主要分为以下几个步骤&#xff1a;首先…...

跨平台迁移零成本转换:MusicFree实现音乐收藏自由的完整指南

跨平台迁移零成本转换&#xff1a;MusicFree实现音乐收藏自由的完整指南 【免费下载链接】MusicFree 插件化、定制化、无广告的免费音乐播放器 项目地址: https://gitcode.com/maotoumao/MusicFree 当你从一个音乐平台转向另一个时&#xff0c;精心整理的歌单往往成为最…...

解锁论文写作新境界:书匠策AI,你的毕业论文智能导航员!

在学术的浩瀚海洋中&#xff0c;每一位即将毕业的大学生或研究生都像是勇敢的航海家&#xff0c;驾驶着知识的帆船&#xff0c;向着那座名为“毕业论文”的灯塔奋力前行。然而&#xff0c;航程中难免会遇到风浪与迷雾&#xff0c;如何高效、准确地完成一篇高质量的毕业论文&…...

[Java 算法] 动态规划(4)

练习一 : 最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int lengthOfLIS(int[] nums) {int n nums.length;int[] dp new int[n];// 初始化&#xff1a;每个元素至少是长度为1的子序列Arrays.fill(dp, 1);int maxLen …...

卡证检测矫正模型实操手册:解决‘检测不到’‘矫正失真’‘误检多框’三大问题

卡证检测矫正模型实操手册&#xff1a;解决‘检测不到’‘矫正失真’‘误检多框’三大问题 你是不是也遇到过这样的烦恼&#xff1f;拍了一张身份证照片&#xff0c;想用程序自动识别&#xff0c;结果模型告诉你“没找到”&#xff1b;好不容易检测到了&#xff0c;矫正出来的…...