数据库回表介绍
- 索引覆盖
- 索引覆盖或称为覆盖索引,是数据库中的一种优化手段
- 当我们在执行一个sql查询时,如果只需要查询某几个字段的值,并且这几个字段的数据都已经被包含在某一个索引中(而不是全表扫描),那么数据库引擎就会直接通过这个索引来取得数据,而无需再回表查询,从而大大减少IO操作,提高了查询效率
- 索引覆盖的优点:
- 减少IO次数,:因为通过覆盖索引可以直接获取数据,所以不需要再回表查询,从而减少了IO次数
- 提高查询速度:由于减少了IO操作,查询速度自然也得到了提高
- 索引的选择性:选择性是指不重复的索引值与数据表的总记录数的比值,选择性越高,通过索引筛选出来的数据就越少,从而提高了查询效率
- 回表
- sql回表是指在使用非聚簇索引(也称为辅助索引或二级索引)进行查询时,由于非聚簇索引中只存储了索引字段的值和对应的主键(聚簇索引)键值,因此,如果需要获取非索引列的数据,则需要根据主键(聚簇索引)中的键值去查找实际的数据行,这个过程被称为回表
- 回表的原理:
- 非聚簇索引结构:非聚簇索引的叶子节点存储的是索引列的值,主键的值
- 查询过程:
- 当使用非聚簇索引进行查询时,首先通过非聚簇索引找到满足条件的主键键值,然后根据这些主键键值,在回到聚簇索引(主键索引)中查找完整的数据行
- 举例:
- 假设有一个用户表users,包含id(主键),name和age三个字段,其中在name字段上建立了非聚集索引
- 执行查询 select * from users where name = ‘tom’;时,会发生回表,因为首先会通过name上的非聚集索引找到满足条件的id,然后再根据这些id,回到聚簇索引中查找完整的用户数据
- 而查询select id,name from users where name = ‘tom’;则不会回表,因为所需的数据都在非聚簇索引中可以找到
- 而回表操作会增加IO次数,从而可能影响查询性能,特别是在大表和复杂查询场景下,回表操作可能成为性能瓶颈
- 为了减少回表操作,可以考虑将需要查询的字段加入到索引中,形成复合索引(也称联合索引或覆盖索引),这样查询时就可以直接从索引中国获取需要的数据,而无需回表
- 最左匹配原则:
- 主要是在是复合索引(也称为多列索引或多字段索引)时的一个关键概念,这个原则指出,当使用复合索引进行查询时,查询条件应该尽可能地从索引的最左边开始匹配,这样索引才能被有效地使用
- 当你基于复合索引进行查询时,查询条件必须包含索引的最左边的一列或多列,以便索引能够有效地使用,例如:如果你有一个基于last_name,first_name的复合索引,一下查询可以有效地使用这个索引:
- 查询基于last_name: select * from employees where last_name = ‘smith’;
- 查询基于laset_name和first_name: select * from employees where last_name = ‘smith’ and first_name =‘john’;
- 但是一下查询则不能有效地使用这个索引(因为他没有包含索引的最左边的列last_name)
- 查询基于:first_name: select * from employees where first_name = ‘john’;
- 在创建复合索引时,列的顺序很重要,你应该将最常用于查询条件的列放在索引的最左边,例如:如果你经常基于last_name进行查询,但很少基于first_name进行查询,那么你应该创建一个基于last_name和first_name的索引,而不是基于first_name和last_name的索引
相关文章:
数据库回表介绍
索引覆盖 索引覆盖或称为覆盖索引,是数据库中的一种优化手段当我们在执行一个sql查询时,如果只需要查询某几个字段的值,并且这几个字段的数据都已经被包含在某一个索引中(而不是全表扫描),那么数据库引擎就会直接通过这个索引来取…...
python多继承的3C算法
python多继承的3C算法 有很多地方都说python多继承的继承顺序,是按照深度遍历的方式,其实python多继承顺序的算法,不是严格意义上的深度遍历,而是基于深度遍历基础上优化出一种叫3C算法 python多继承的深度遍历 class C:def ru…...
掌握Python编程的深层技能
一、Python基础语法、变量、列表、字典等运用 1.运行python程序的两种方式 1.交互式即时得到程序的运行结果 2.脚本方式把程序写到文件里(约定俗称文件名后缀为.py),然后用python解释器解释执行其中的内容2.python程序运行的三个步骤 python3.8 C:\a\b\c.py 1.先启动python3…...
Echarts地图实现:各省市计划录取人数
Echarts地图实现:各省市计划录取人数 实现功能 本文将介绍如何使用 ECharts 制作一个展示中国人民大学2017年各省市计划录取人数的地图。我们将实现以下图表形式: 地图:基础的地图展示,反映不同省市的录取人数。散点图…...
shell脚本if/else使用示例
if判断字符串是否为空实例if判断整数是否为奇数实例if判断整数是否为偶数实例if判断整数是否为正数实例if判断整数是否为负数实例输入两个字符串,输出字符串的大小关系输入学生的成绩判断是否合法输入学生的成绩判断是否及格判断平年闰年输入文件判断文件是否是普通…...
【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(二)
当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js?1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形 ✔️ 第一部分【第二部分】✔️第三部分(精译中 ⏳) 1.2.3 Canvas 与 WebGL&#x…...
Java中的Monad设计模式及其实现
Java中的Monad设计模式及其实现 在函数式编程中,Monad是一种重要的设计模式,用于处理包含隐含计算信息(如计算顺序、环境、状态、错误处理等)的计算。Monad提供了一种结构,使得可以将计算链式连接起来,每一…...
Dahlia Hart: Stylized Casual Character(休闲角色模型)
此包包含两个发型和两个服装,每个都有多种颜色选择。每个发型都适合与物理资源一起使用,并包含各种表情和音素混合形状。 下载:Unity资源商店链接资源下载链接 效果图:...
vector容器
以下是关于vector容器的总结 1、构造容器 2、容器赋值 3、获取容量capacity和大小size 4、插入和删除 5、数据存取 6、互换容器和预留空间 #include <iostream> #include <vector>using namespace std; // vector数据结构和数组非常相似,也称为单端数组…...
二进制常用知识整理<java>
1、进制转换: int转二进制: public static void main(String[] args) {int a 0b100;//0b表示后面的为二进制表示,0开始表示八进制System.out.println(a);System.out.println(Integer.toBinaryString(a));System.out.println(Integer.toStr…...
基于Docker的淘客返利平台部署
基于Docker的淘客返利平台部署 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在本文中,我们将探讨如何利用Docker技术来部署一个淘客返利平台。Doc…...
【涵子来信科技潮流】——WWDC24回顾与暑假更新说明
期末大关,即将来袭。在期末之前,我想发一篇文章,介绍有关WWDC24的内容和暑假中更新的说明。本篇文章仅为个人看法和分享,如需了解更多详细内容,请通过官方渠道或者巨佬文章进行进一步了解。 OK, Lets go. 一、WWDC24 …...
重温react-08(createContext使用方式)
react中的createContext使用方式 简介一下,就是组件之间可以互相通信的比较好用的传值方式,话不多说直接上代码。 以下介绍的是类组件中的方式,在函数组件中不是如此使用的。 定义一个通用的方法 import { createContext } from "react…...
LInux后台运行程序
测试c代码 #include <stdio.h> #include <unistd.h> int main() {for (int i;; i) {printf("b数值 %d\n", i);fflush(stdout);sleep(3);} }使用CtrlZ可以将当前正在运行的程序放到后台并暂停它。如果你想要继续这个暂停的程序,可以使用fg命令…...
DEBOPIE框架:打造最好的ChatGPT交易机器人
本文介绍了如何利用 DEBOPIE 框架并基于 ChatGPT 创建高效交易机器人,并强调了在使用 AI 辅助交易时需要注意的限制以及操作步骤。原文: Build the Best ChatGPT Trading Bots with my “DEBOPIE” Framework 如今有大量文章介绍如何通过 ChatGPT 帮助决定如何以及在…...
C++ Thead多线程 condition_variable 与其使用场景---C++11多线程快速学习
std::condition_variable 的步骤如下: 创建一个 std::condition_variable 对象。 创建一个互斥锁 std::mutex 对象,用来保护共享资源的访问。 在需要等待条件变量的地方 使用 std::unique_lock<std::mutex> 对象锁定互斥锁 并调用 std::conditio…...
什么是前端开发?
前端开发是什么一种工作?这里以修房子举例: jquery根据数据去生成对应的html代码。首先得有一个html代码的“房屋构造”,然后根据数据去填充“房屋构造”的“血肉”,最后JavaScript通过事件等方法给一砖一瓦修好的房屋添加“灵魂…...
大数据面试题之Spark(1)
目录 Spark的任务执行流程 Spark的运行流程 Spark的作业运行流程是怎么样的? Spark的特点 Spark源码中的任务调度 Spark作业调度 Spark的架构 Spark的使用场景 Spark on standalone模型、YARN架构模型(画架构图) Spark的yarn-cluster涉及的参数有哪些? Spark提交jo…...
Spring Boot 和 Spring Framework 的区别是什么?
SpringFramework和SpringBoot都是为了解决在Java开发过程中遇到的各种问题而出现的。了解它们之间的差异,能够更好的帮助我们使用它们。 SpringFramework SpringFramework是一个开源的Java平台,它提供了一种全面的架构和基础设施来支持Java应用程序的开…...
JVM原理(四):JVM垃圾收集算法与分代收集理论
从如何判定消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”和“追踪式垃圾收集”两大类。 本文主要介绍的是追踪式垃圾收集。 1. 分代收集理论 当代垃圾收集器大多遵循“分代收集”的理论进行设计,它建立在两个假说之上: 弱分…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
