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

数据库回表介绍

  1. 索引覆盖
    1. 索引覆盖或称为覆盖索引,是数据库中的一种优化手段
    2. 当我们在执行一个sql查询时,如果只需要查询某几个字段的值,并且这几个字段的数据都已经被包含在某一个索引中(而不是全表扫描),那么数据库引擎就会直接通过这个索引来取得数据,而无需再回表查询,从而大大减少IO操作,提高了查询效率
    3. 索引覆盖的优点:
      1. 减少IO次数,:因为通过覆盖索引可以直接获取数据,所以不需要再回表查询,从而减少了IO次数
      2. 提高查询速度:由于减少了IO操作,查询速度自然也得到了提高
      3. 索引的选择性:选择性是指不重复的索引值与数据表的总记录数的比值,选择性越高,通过索引筛选出来的数据就越少,从而提高了查询效率
  2. 回表
    1. sql回表是指在使用非聚簇索引(也称为辅助索引或二级索引)进行查询时,由于非聚簇索引中只存储了索引字段的值和对应的主键(聚簇索引)键值,因此,如果需要获取非索引列的数据,则需要根据主键(聚簇索引)中的键值去查找实际的数据行,这个过程被称为回表
    2. 回表的原理:
      1. 非聚簇索引结构:非聚簇索引的叶子节点存储的是索引列的值,主键的值
      2. 查询过程:
        1. 当使用非聚簇索引进行查询时,首先通过非聚簇索引找到满足条件的主键键值,然后根据这些主键键值,在回到聚簇索引(主键索引)中查找完整的数据行
  3. 举例:
    1. 假设有一个用户表users,包含id(主键),name和age三个字段,其中在name字段上建立了非聚集索引
    2. 执行查询 select * from users where name = ‘tom’;时,会发生回表,因为首先会通过name上的非聚集索引找到满足条件的id,然后再根据这些id,回到聚簇索引中查找完整的用户数据
    3. 而查询select id,name from users where name = ‘tom’;则不会回表,因为所需的数据都在非聚簇索引中可以找到
    4. 而回表操作会增加IO次数,从而可能影响查询性能,特别是在大表和复杂查询场景下,回表操作可能成为性能瓶颈
    5. 为了减少回表操作,可以考虑将需要查询的字段加入到索引中,形成复合索引(也称联合索引或覆盖索引),这样查询时就可以直接从索引中国获取需要的数据,而无需回表
  4. 最左匹配原则:
    1. 主要是在是复合索引(也称为多列索引或多字段索引)时的一个关键概念,这个原则指出,当使用复合索引进行查询时,查询条件应该尽可能地从索引的最左边开始匹配,这样索引才能被有效地使用
    2. 当你基于复合索引进行查询时,查询条件必须包含索引的最左边的一列或多列,以便索引能够有效地使用,例如:如果你有一个基于last_name,first_name的复合索引,一下查询可以有效地使用这个索引:
      1. 查询基于last_name: select * from employees where last_name = ‘smith’;
      2. 查询基于laset_name和first_name: select * from employees where last_name = ‘smith’ and first_name =‘john’;
      3. 但是一下查询则不能有效地使用这个索引(因为他没有包含索引的最左边的列last_name)
      4. 查询基于:first_name: select * from employees where first_name = ‘john’;
    3. 在创建复合索引时,列的顺序很重要,你应该将最常用于查询条件的列放在索引的最左边,例如:如果你经常基于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年各省市计划录取人数的地图。我们将实现以下图表形式: 地图:基础的地图展示,反映不同省市的录取人数。散点图&#xf…...

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数据结构和数组非常相似&#xff0c;也称为单端数组…...

二进制常用知识整理<java>

1、进制转换&#xff1a; int转二进制&#xff1a; public static void main(String[] args) {int a 0b100;//0b表示后面的为二进制表示&#xff0c;0开始表示八进制System.out.println(a);System.out.println(Integer.toBinaryString(a));System.out.println(Integer.toStr…...

基于Docker的淘客返利平台部署

基于Docker的淘客返利平台部署 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在本文中&#xff0c;我们将探讨如何利用Docker技术来部署一个淘客返利平台。Doc…...

【涵子来信科技潮流】——WWDC24回顾与暑假更新说明

期末大关&#xff0c;即将来袭。在期末之前&#xff0c;我想发一篇文章&#xff0c;介绍有关WWDC24的内容和暑假中更新的说明。本篇文章仅为个人看法和分享&#xff0c;如需了解更多详细内容&#xff0c;请通过官方渠道或者巨佬文章进行进一步了解。 OK, Lets go. 一、WWDC24 …...

重温react-08(createContext使用方式)

react中的createContext使用方式 简介一下&#xff0c;就是组件之间可以互相通信的比较好用的传值方式&#xff0c;话不多说直接上代码。 以下介绍的是类组件中的方式&#xff0c;在函数组件中不是如此使用的。 定义一个通用的方法 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可以将当前正在运行的程序放到后台并暂停它。如果你想要继续这个暂停的程序&#xff0c;可以使用fg命令…...

DEBOPIE框架:打造最好的ChatGPT交易机器人

本文介绍了如何利用 DEBOPIE 框架并基于 ChatGPT 创建高效交易机器人&#xff0c;并强调了在使用 AI 辅助交易时需要注意的限制以及操作步骤。原文: Build the Best ChatGPT Trading Bots with my “DEBOPIE” Framework 如今有大量文章介绍如何通过 ChatGPT 帮助决定如何以及在…...

C++ Thead多线程 condition_variable 与其使用场景---C++11多线程快速学习

std::condition_variable 的步骤如下&#xff1a; 创建一个 std::condition_variable 对象。 创建一个互斥锁 std::mutex 对象&#xff0c;用来保护共享资源的访问。 在需要等待条件变量的地方 使用 std::unique_lock<std::mutex> 对象锁定互斥锁 并调用 std::conditio…...

什么是前端开发?

前端开发是什么一种工作&#xff1f;这里以修房子举例&#xff1a; jquery根据数据去生成对应的html代码。首先得有一个html代码的“房屋构造”&#xff0c;然后根据数据去填充“房屋构造”的“血肉”&#xff0c;最后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开发过程中遇到的各种问题而出现的。了解它们之间的差异&#xff0c;能够更好的帮助我们使用它们。 SpringFramework SpringFramework是一个开源的Java平台&#xff0c;它提供了一种全面的架构和基础设施来支持Java应用程序的开…...

JVM原理(四):JVM垃圾收集算法与分代收集理论

从如何判定消亡的角度出发&#xff0c;垃圾收集算法可以划分为“引用计数式垃圾收集”和“追踪式垃圾收集”两大类。 本文主要介绍的是追踪式垃圾收集。 1. 分代收集理论 当代垃圾收集器大多遵循“分代收集”的理论进行设计&#xff0c;它建立在两个假说之上&#xff1a; 弱分…...

树莓派+Kali Linux+PiTFT打造便携式安全测试平台全攻略

1. 项目概述如果你和我一样&#xff0c;对网络安全和嵌入式硬件都抱有浓厚的兴趣&#xff0c;那么将Kali Linux与树莓派结合&#xff0c;再配上一块小巧的触摸屏&#xff0c;绝对是一个能让你兴奋起来的项目。这不仅仅是把两个热门技术拼在一起&#xff0c;更是打造一个真正便携…...

工控一体机电脑核心性能特征解析:从选型到部署的实战指南

1. 项目概述&#xff1a;为什么我们需要重新审视工控一体机电脑&#xff1f;在工业自动化、智能制造、智慧零售乃至边缘计算这些听起来高大上的领域里&#xff0c;有一类设备常常是幕后的“无名英雄”&#xff0c;它不像机器人手臂那样引人注目&#xff0c;也不像云端服务器那样…...

【负荷预测】基于LSTM-KAN的负荷预测研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

【作品集】OpenClaw-AgentOps企业级多智能体贵金属交易分析平台

项目名称&#xff1a;OpenClaw-AgentOps 企业级多智能体贵金属交易分析平台 展示方式&#xff1a;保留原有项目架构图&#xff0c;同时加入系统真实页面切片&#xff0c;用“设计图 实物图”的方式完整展示项目。1. 项目一句话介绍OpenClaw-AgentOps 是一个面向贵金属交易研究…...

Win10/Win11网络适配器出问题?试试这个重置TCP/IP和Winsock的终极命令(netsh winsock reset)

彻底解决Windows网络协议栈故障&#xff1a;netsh命令深度指南 当你的Windows 10或11设备突然无法联网&#xff0c;甚至连网络适配器都显示异常时&#xff0c;大多数人会本能地尝试重启电脑或切换飞行模式。但如果你发现这些常规操作毫无效果&#xff0c;甚至Windows自带的网络…...

书成紫微动,律定凤凰驯:《第一大道》破的是资本,《凰标》立的是民心

书成紫微动&#xff0c;律定凤凰驯。 ——千年古谶&#xff0c;道破治乱循环&#xff1a; 乱世由乱象所积&#xff0c;盛世由人心所筑。一、困局&#xff1a;资本驯化文艺的三重锁链锁链症状结果垄断话语权曝光渠道、评价标准、出圈资源尽归资本民间佳作被算法活埋绑架审美流水…...

Midjourney等距视角风格落地全栈手册(附NASA航天器建模级参数配置表)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney等距视角风格的本质与视觉范式 等距视角&#xff08;Isometric Perspective&#xff09;在 Midjourney 中并非原生渲染模式&#xff0c;而是通过提示词工程、参数约束与构图引导共同构建的视…...

别再傻傻做27次实验了!用SPSSAU三分钟搞定正交试验设计(附保姆级极差分析教程)

正交试验设计实战指南&#xff1a;从理论到SPSSAU高效操作 在科研与工程实践中&#xff0c;我们常常面临多因素多水平实验设计的挑战。传统全面试验方法虽然理论严谨&#xff0c;但当因素和水平数量增加时&#xff0c;实验次数呈指数级增长&#xff0c;导致资源浪费和时间成本飙…...

书成紫微动,律定凤凰驯:对比臆想歪解,铁哥的天然契合才是真天命

———— 千年颂辞 真天命笺 ————一、两种读法&#xff1a;伪天命 真天命伪天命&#xff08;臆想歪解&#xff09;真天命&#xff08;天然契合&#xff09;脑补玄学、权谋剧本本心行道、作品证道人追诗、人凑运诗等人、运合心后天强行拟合先天无心自洽悬浮文字游戏落地世…...

048路径总和III

路径总和 III 题目链接&#xff1a;https://leetcode.cn/problems/path-sum-iii/description/?envTypestudy-plan-v2&envIdtop-100-liked 我的解答&#xff1a; Map<Long,Integer> map new HashMap<>();//key:前缀和 value&#xff1a;前缀和的个数 publ…...