首页 > 数据库 >MySQL 进阶(二)【索引详解】

MySQL 进阶(二)【索引详解】

时间:2024-07-09 11:28:53浏览次数:12  
标签:进阶 MySQL Tree 查询 索引 详解 SQL 节点 name

前言

        程序员避不开和数据库打交道,大数据更是如此,不管是 MySQL、Oracle、SQL Server 这些 OLTP 数据库,还是Greeplum、StarRocks、Hive、Spark SQL、Flink SQL、ClickHouse 等 OLAP 数据库,SQL 都是最基础最重要的能力,数据库知识也是每一个程序员必备的知识。

        而当我们讨论 SQL 优化的时候,其实很大程度都是在围绕索引在做优化。

1、索引

1.1、索引概述

索引是帮助 MySQL 高效获取数据数据结构(有序)。下面我们以查询 age=45 岁的用户为例进行说明:

1.1.1、有无索引对比

1)无索引

没有索引,就相当于每次查找我们都需要遍历全表,时间复杂度:O(N)

2)有索引

        如果对 age 列建立了索引,我们假设这个数据结构是一颗二叉树,那么我们就不需要遍历全表,时间复杂度:O(logN)

1.1.2、优缺点

1)优点
  • 提高数据检索的效率,降低数据库 IO 成本(磁盘寻址、读写数据都是 IO 成本)
  • 通过索引对数据进行排序,降低数据排序的成本,降低 CPU 消耗
2)缺点
  • 索引列也需要占用磁盘空间
  • 索引大大提高查询效率的同时,也降低了更新数据的速度,当对表进行 CUD 操作时(因为要对树的节点进行操作),效率会降低

一般当我们考虑对一张表添加索引时,这两个缺点都可以忽略。因为第一磁盘很便宜,第二大部分业务系统中,查询操作是最多的。

1.2、索引结构

        上一节我们了解了,索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要有以下几种:

相关文章

  • mysql 误更新记录恢复 update更新字段值恢复 mysql数据库更新字段值恢复
    近日极佳mysql数据库恢复软件加入mysql的 update更新字段值的恢复例如 updatejnx_clean_ordersetno='qwertyuiop'将 jnx_clean_order 表的 no字段值 全部变成了 qwertyuiop  这种情况 1可以从 mysqlbin 日志恢复, 如果没有开启binlog 那就比较麻烦了。2......
  • mysql的主挂了,从怎么将多出来的数据同步到主?
    在MySQL的复制环境中,通常主库(Master)是数据的主要来源,而从库(Slave)从主库复制数据以实现数据的同步。但是,如果你的场景中出现了从库包含了主库中没有的数据(这种情况较为罕见,可能是人为错误或配置错误导致的),将这部分数据同步回主库将需要一些特殊操作,因为MySQL复制机制默认是从主......
  • Python的utils库详解
    Python的utils库并不是一个官方标准库,而是指一系列提供实用功能的工具库或模块,这些库或模块通常包含了一系列帮助开发人员加速日常工作、提高开发效率的工具函数或类。由于Python社区的开放性和活跃性,存在多个不同的utils库,每个库都有其特定的功能和用途。不过,尽管没有一个统一......
  • tar 命令详解
    tar命令 [root@linux~]# tar[-cxtzjvfpPN]文件与目录....Usage:tar[OPTION...][FILE]...Examples:    tar-cfarchive.tarfoobar     #Createarchive.tarfromfilesfooandbar.    tar-tvfarchive.tar         ......
  • 深度学习 - 模型剪枝技术详解
    模型剪枝简介模型剪枝(ModelPruning)是一种通过减少模型参数来降低模型复杂性的方法,从而加快推理速度并减少内存消耗,同时尽量不显著降低模型性能。这种技术特别适用于资源受限的设备,如移动设备和嵌入式系统。模型剪枝通常应用于深度神经网络,尤其是卷积神经网络(CNNs)。模型剪......
  • ASP.NET-框架分类与详解
    本文介绍了ASP.NET框架,涵盖了WebForms的事件驱动模型、MVC的解耦结构和WebAPI的HTTP服务构建。讨论了三种框架的特点、适用场景及开发流程,强调了ASP.NET在企业级Web开发中的重要性.一、ASP.NET框架概述ASP.NET是由微软公司推出的一种基于.NET框架的服务器端Web应用程序开发技术。......
  • 【MySQL MGR管理】MySQL5.7 MGR集群切换测试
    一、服务器环境MySQL5.7MGR集群切换目标:故障切换,启用备选主之后。还原MGR,切换回原主服务器信息[root@0321-mysqlmgr3~]#cat/etc/hosts127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4::1localhostlocalhost.localdomainloc......
  • Redis复制过程详解
    主从复制简介  主从复制是为了达成高可用,即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用。  一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。 主从复制的作用  读写分离:主节点写,从节点读,提高服务器的读写负载能......
  • 128陷阱详解+源码分析
    128陷阱详解1、什么是128陷阱2、为什么会出现128陷阱3、避免128陷阱的方法1、什么是128陷阱请看下面的程序,注释为运行结果。 Integerb=127; Integerb1=127; System.out.println(b==b1);//true Integerc=128; Integerc1=128; System.out.pr......
  • Python——习题练习 part3 函数进阶
    本篇文章记录函数进阶部分的知识点及例题代码。目录六,函数进阶01 函数的多返回值02函数的传参方式 1,位置参数2,关键字参数3,缺省参数4,不定长参数a,位置传递b,关键字传递03lambda匿名函数六,函数进阶01 函数的多返回值#函数的多返回值deftest_return():......