MySQL45讲笔记04深入浅出索引上

news2024/12/29 0:43:11
  • 索引的目的:
    索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。
  • 常见索引模型
    hash表,以K-V键值对的形式的一种数据结构,底层是数组加链表形式。通过一定的hash运算找到数据合适的位置放入,如果放入的位置相同时,则拉出一个链表保存。

在这里插入图片描述
缺点就是,由于上图中的数据不是顺序排列的,所以查找的时候需要对数据进行遍历,造成了查询较慢的问题。

有序数组形式:顾名思义是有序的数组,这样可以使用二分查找去搜索,速度非常快。缺点是,当数组内数据变化时,需要挪动位置。这样的效率就很低,所以只适用于静态数据,一些不会再变化的数据。
二叉树
在这里插入图片描述
在mysql中使用的是B+树,与B树的区别如下:

b+树的中间节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖”;
b+树查询必须查找到叶子节点,b树只要匹配到即可不用管元素位置,因此b+树查找更稳定(并不慢);
对于范围查找来说,b+树只需遍历叶子节点链表即可,b树却需要重复地中序遍历

回表概念
每一个索引都是一颗B+树,索引分为普通索引,主键索引。
推荐使用主键索引,原因是主键索引不需要回表(详情?)回表导致查询效率降低的问题。
使用主键索引才能查询出完整表数据,非主键索引只能查出主键和对印的索引列数据。所以需要进行回表。

当然如果你要查询的列就是主键和索引列就不需要回表,直接可以查出来。这就是索引覆盖。

索引维护
插入或删除数据时,可能需要对B+树进行维护,涉及到数据页的分裂或合并。
当我们设置自动递增的主键索引时,这些增加的操作都是对B+树的追加,不会触发到叶子节点的分裂。
使用业务逻辑字段做主键时,往往不需要保证有序插入,遮掩的成本有点高。

主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小。 尽量使用主键查询

总结:

  1. Innodb采用B+树结构,减少查询次数。
  2. 建议使用自增主键索引,这样可以减少普通索引的叶子节点大小,但是还是需要根据业务来进行分析。
  3. 没有主键innodb会自动创建一个主键RowId

问题:重建索引,重建主键索引?说出你的理解以及不合适的地方?为什么?

alter table T drop index k;
alter table T add index(k);
alter table T drop primary key;
alter table T add primary key(id);

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

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

相关文章

[jetson]paddlepaddle2.4.0在jetpack5.0.2源码编译流程

由于官方暂时没有提供jetson对应的jetson jetpack5.0.2预编译包,因此只有源码编译,本次编译不带Tensorrt,编译已经顺利成功,注意本次使用的设备是jetson NX 测试环境: ubuntu20.04 jetpack5.0.2 GCC-8.4 Software part of jet…

Centos7搭建NFS

1.NFS简介Network File System(网络文件系统,通过网络让不同的机器系统之间可以彼此共享文件和目录,类似Samba服务。2.NFS挂载原理 在网络中服务器和客户端进行连接都是通过端口进行数据传输,而NFS服务端的端口是随机的,从而导致N…

Linux----网络基础(2)--应用层的序列化与反序列化--守护进程--0226

文章中有使用封装好的头文件,可以在下面连接处查询。 Linux相关博文中使用的头文件_Gosolo!的博客-CSDN博客 1. 应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层 1.2 协议 我们在之前的套接字编程中使用的是…

最适合你的团队云协作工具

团队云协作工具哪个好?使用Zoho Projects的团队云协作软件套件,在一个平台上无缝协作,激励您的团队在任何地方以最好的状态完成他们的工作。 使您的团队能够使用团队云协作软件在任何地方进行协作和沟通。Zoho Projects提供了一套强大…

三天吃透计算机网络八股文

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…

一文读懂光学天线

天线,按维基百科的定义,"是一种用来发射或接收无线电波—或更广泛来讲—电磁波的器件"。例如,在无线通信系统中,天线被用于发射与接收射频与微波波段的电磁波。而在我们的智能手机中,就有内置的平面倒F天线(…

01-认识产品经理

文章目录引入1.1 合格的产品经理1.2 产品经理的分类按服务对象不同划分按产品平台不同划分按公司所属行业不同按工作内容划分按职级高低划分1.3 产品经理的岗位职责产品的开发流程核心团队成员及其职责产品经理工作中常见误区1.4 产品经理的能力素质专业技能(干得了…

Unity Lighting -- 配置平行光源和天空盒

识别不同种类的光源 在游戏或实时应用程序中,我们可能会创建多种不同种类的场景,比如室内场景、室外场景、真实的场景或完全想象的场景。即便项目是一个完全的想象的或是科幻的故事,灯光也是非常重要的一环,它能极大提升沉浸感。 …

Python3-条件控制

Python3 条件控制 Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: 代码执行过程: if 语句 Python中if语句的一般形式如下所示: if condi…

Atlassian Server用户新选择 | 数据中心产品是否适合您的企业(3)?

2024年2月,也就是一年不到,Atlassian将终止对Server产品及插件的所有支持。 此公告发布后,许多用户需要了解怎样的前进方向才是最适合企业的。为此,Atlassian不仅提供云版,还提供了本地部署的数据中心(Data…

jupyter lab安装和配置

jupyter lab 安装和配置 一、jupyter lab安装并配置 安装jupyterlab pip install jupyterlab启动 Jupyter lab默认会打开实验环境的,也可以自己在浏览器地址栏输入127.0.0.1:8888/lab 汉化 pip install jupyterlab-language-pack-zh-CN刷新一下网页&#xff0…

ChatGPT解答:PYQT5 组件化实例,Python代码实现,给出100个代码实例

ChatGPT解答: PYQT5 组件化实例,Python代码实现,给出100个代码实例 PYQT5 组件化实例,Python代码实现,给出100个代码实例 实现一个简单的窗口 import sys from PyQt5.QtWidgets import QApplication, QWidgetapp QA…

我90后,零基础成功转行python工程师,从月薪5K到现在月入2W+改变真的难吗?

我是25岁转行学python的。说实在,转行就是奔着挣钱去的。希望我的经历可以给想转行的朋友带来一点启发和借鉴。 先简单介绍下个人背景,三流大学毕业,物流专业,学习能力一般,没啥特别技能,反正就很普通的一…

CSS3新特性-变量

2017年三月,微软宣布 Edge 浏览器将支持 CSS 变量。 这个重要的 CSS 新功能,所有主要浏览器已经都支持了。本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大。 一、变量的声明 声明变量的时候,变量名前面要加两根连词…

python入门应该怎么学习

国外Python的使用率非常高,但在国内Python是近几年才火起来,Python正处于高速上升期市场对于Python开发人才的需求量急剧增加,学习Python的前景比较好。 Python应用领域广泛,意味着选择Python的同学在学成之后可选择的就业领域有…

虚函数与多态性

5.1多态性概述: 按实施的机制,多态可以分为两类: 虚函数的定义: (前面思维是虚基类,别搞混了) 运行时多态的条件: 运行时的多态: 基类中有show(),派生类中也有show&…

叠氮化物标记糖92659-90-0,2-[(Azidoacetyl)amino]-2-deoxy-D-glucose广泛用于体内代谢标记

基础产品数据:CAS号:92659-90-0中文名:2-[(叠氮基乙酰基)氨基]-2-脱氧葡萄糖英文名:2-[(Azidoacetyl)amino]-2-deoxy-D-glucose性 状:白色粉末温馨提示:所有的试剂仅用于科研实验。结构式(Struc…

ChatGPT解答:纯前端文档预览,Vue实现,无需后端,支持Word、Excel、PPT、pdf、文本、图片,附接入demo和文档

ChatGPT解答:纯前端文档预览,Vue实现,无需后端,支持Word、Excel、PPT、pdf、文本、图片,附接入demo和文档 ChatGPTDemo Based on OpenAI API (gpt-3.5-turbo). 纯前端文档预览,Vue实现,无需后…

【软件测试】性能测试面试题都问什么?面试官想要什么?回答惊险避坑......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 1、你认为不同角色关…

A Bio-Inspired Multi-Exposure Fusion Frameworkfor Low-light Image Enhancement

Abstract弱光图像的能见度较低,不利于人类观察和计算机视觉算法。尽管许多图像增强技术已经被提出来解决这个问题,现有的方法不可避免地引入对比度增强不足和过度。受人类视觉系统的启发,我们设计了一个用于微光图像增强的多曝光融合框架。在…