揭秘数据库性能飞跃的秘密:深入理解索引与执行计划的艺术

news2024/11/14 13:25:33
  •  作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注
  •  座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
  •  个人主页:团儿.-CSDN博客

目录

前言:

正文:

一.索引

1. 索引的作用

2. 索引的分类(算法) **

3. BTREE索引算法演变(了解) ***

二.Btree索引功能上的分类

1.聚集索引(唯一性) ***

2.辅助索引(多个) ***

3.聚集索引和辅助索引的区别 *****

三.辅助索引细分

四.索引的命令操作

1.查询索引

2.创建索引

单列的辅助索引:

多列的联合索引:

唯一索引:

前缀索引

3.删除索引

五.压力测试准备:

1.未做优化前压测

2.索引优化后

六.执行计划分析

1.作用

2.获取执行

3.分析执行计划

3.1 table        

3.2 type

全表扫描: ALL

索引扫描:

4.添加索引:

5.index: 全索引扫描

6.range: 索引范围扫描(> < >= <= , between and ,or,in,like )

7.ref: 辅助索引等值查询

eq_ref :

const(system) :


前言:

在这个信息化的时代,掌握数据库的知识就像是掌握了打开宝藏的钥匙。

索引和执行计划作为数据库管理的重要工具,能够帮助我们高效地组织和检索数据。

通过深入了解这两者的工作原理及其在实际应用中的优化方法,我们可以显著提升数据库的性能表现。

今天,我们就来聊聊MySQL数据库中的索引和执行计划,以及如何利用它们的优化功能。


正文:

一.索引

1. 索引的作用

类似于一本书中的目录,通过索引可以快速定位到数据具体的物理存储位置,起到优化查询的作用

2. 索引的分类(算法) **

B树    

默认使用的索引类型(原型:平衡二叉树算法)

R树

Hash

FullText

GIS 索引

3. BTREE索引算法演变(了解) ***

B- 叶子节点无水平指针

B+

叶子节点有水平指针,可以方便范围查询

B*

枝节点有水平指针,mysql当前默认


二.Btree索引功能上的分类

1.聚集索引(唯一性) ***

(1)MySQL 会自动选择主键作为聚集索引列,没有主键会选择唯一键,如果都没有会生成隐藏的.

(2)MySQL进行存储数据时,会按照聚集索引列值的顺序,有序存储数据行

(3)聚集索引直接将原表数据页,作为叶子节点,然后提取聚集索引列向上生成枝和根

2.辅助索引(多个) ***

(1) 提取索引列的所有值,进行排序

(2) 将排好序的值,均匀的存放在叶子节点,进一步生成枝节点和根节点

(3) 在叶子节点中的值,都会对应存储主键ID

3.聚集索引和辅助索引的区别 *****

(1) 表中任何一个列都可以创建辅助索引,在你有需要的时候,只要名字不同即可

(2) 在一张表中,聚集索引只能有一个,一般是主键.

(3) 辅助索引,叶子节点只存储索引列的有序值+聚集索引列值.

(4) 聚集索引,叶子节点存储的时有序的整行数据.

(5) MySQL 的表数据存储是聚集索引组织表,辅助索引查询表。

注:mysql的查询过程就是通过辅助索引找到主键索引的id号,再通过主键索引查数据行


三.辅助索引细分

单列辅助索引

联合索引(覆盖索引) *****

唯一索引


四.索引的命令操作

1.查询索引

desc city;

PRI   ==> 主键索引

MUL   ==> 辅助索引

UNI   ==> 唯一索引

show index from city\G(\G行转列)

2.创建索引

单列的辅助索引:

alter table city add index idx_name(name);

show index from city\G

多列的联合索引:

alter table city add index idx_c_p(countrycode,population);

show index from city\G

唯一索引:

alter table city add unique index uidx_dis(district);

注:有联合索引无法创建唯一索引

select count(district) from city;

select count(distinct district) from city;

前缀索引

alter table city add index idx_dis(district(5));

show index from city\G

3.删除索引

alter table city drop index idx_name;

alter table city drop index idx_c_p;

alter table city drop index idx_dis;

五.压力测试准备:

source /tmp/t100w.sql

1.未做优化前压测

mysqlslap --defaults-file=/etc/my.cnf \

--concurrency=100 --iterations=1 --create-schema='world' \

--query="select * from t100w where k2='MN89'" engine=innodb \

--number-of-queries=200 -uroot -verbose

2.索引优化后

创建k2列索引:

alter table t100w add index idx_k2(k2);

再次并发测试:

mysqlslap --defaults-file=/etc/my.cnf \

--concurrency=100 --iterations=1 --create-schema='world' \

--query="select * from t100w where k2='MN89'" engine=innodb \

--number-of-queries=200 -uroot -verbose


六.执行计划分析

1.作用

将优化器 选择后的执行计划 截取出来.便于管理管判断语句得执行效率

2.获取执行

desc   SQL语句

explain SQL 语句

mysql>

desc select * from t100w where k2='MN89';

3.分析执行计划

3.1 table        

表名

3.2 type

查询的类型:

全表扫描: ALL
索引扫描:

index 全索引扫描

range 范围

ref 等值

eq_ref 联合等值

const(system) 主键等值

NULL 没有索引

4.添加索引:

use world

desc city;

alter table city add index idx_c_p(countrycode,population);

5.index: 全索引扫描

desc select countrycode  from city;

desc select countrycode from city where countrycode='CHN' and population>5000000;

6.range: 索引范围扫描(> < >= <= , between and ,or,in,like )

desc select * from city where id>2000;

desc select  * from city where countrycode like 'CH%';

对于辅助索引来讲,!= 和not in等语句是不走索引的

对于主键索引列来讲,!= 和not in等语句是走range


 

desc select  * from city where countrycode='CHN' or countrycode='USA';

desc select  * from city where countrycode in ('CHN','USA');

一般改写为 union all

desc

select  * from city where countrycode='CHN'

union all

select  * from city where countrycode='USA';

7.ref: 辅助索引等值查询

desc

select  * from city where countrycode='CHN'

union all

select  * from city where countrycode='USA';

eq_ref :

多表连接时,子表使用主键列或唯一列作为连接条件

A join B

on a.x = B.y

desc select b.name,a.name ,a.population  

from city as a

join country as b

on a.countrycode=b.code

where a.population<100;

const(system) :

主键或者唯一键的等值查询

desc select * from  city where id=100;


期待您的关注~

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

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

相关文章

2024最新版超级全的Python基础知识

数据类型和变量 Python使用缩进来组织代码块,一般使用4个空格的缩进.使用#来注释一行,其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块.Python对大小写敏感 1.1整数 Python可以处理任意大小的整数,包括负整数,写法与数学上写法一致,例如&#xff1a;-100.如…

项目管理软件的技术深度剖析:从架构到创新的全面探索

各位技术小伙伴们&#xff0c;今天咱们跟随猴哥聊聊一个既熟悉又略带神秘的话题——项目管理软件。在快节奏的现代商业环境中&#xff0c;项目管理就像是企业运作的润滑剂&#xff0c;而项目管理软件&#xff0c;就是那把让一切井然有序的神器。不过&#xff0c;别看它平时默默…

大模型sft评估指标方案

大模型sft评估一直都是一个让人头疼的问题&#xff0c;那么如何进行sft评估呢&#xff1f; 一共有两类方案 第一类&#xff1a;用另一个AI或者人类 对模型答案进行打分 可以是竞技场模式&#xff0c;也可以是离线打分模式 打分可以用一些权威的榜单&#xff0c;例如 super…

AI芯片国产化率100%!运营商最大单集群智算中心投产

8月30日&#xff0c;中国移动建成运营商最大单集群智算中心——中国移动智算中心&#xff08;哈尔滨&#xff09;&#xff0c;并正式投产使用&#xff0c;将为全国的科技创新与产业升级带来强大助力。 该智算中心部署超1.8万张AI加速卡&#xff0c;AI芯片国产化率达100%&#x…

【吊打面试官系列-Redis面试题】都有哪些办法可以降低 Redis 的内存使用情况呢?

大家好&#xff0c;我是锋哥。今天分享关于【都有哪些办法可以降低 Redis 的内存使用情况呢&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 都有哪些办法可以降低 Redis 的内存使用情况呢&#xff1f; 如果你使用的是 32 位的 Redis 实例&#xff0c;可以好好利…

佰朔资本:股票市场牛熊是什么意思,熊市怎么找投资机会?

股票商场中的牛市&#xff0c;也被称为多头商场&#xff0c;指的是股票价格长时刻呈上升趋势的股票商场&#xff0c;后续广泛看涨的情况。 股票商场中的熊市&#xff0c;也被称为空头商场&#xff0c;指股票的价格长时刻呈下降趋势的股票商场&#xff0c;后续广泛看跌的情况。…

计算机常见网络协议分析(1)

1.ppp协议 &#xff09;流程&#xff1a;五个阶段 链路不可用阶段dead 链路建立阶段established 认证阶段authentiate 网络层协议阶段network 链路终止阶段terminate &#xff09;帧格式: Flags&#xff1a;帧定界&#xff0c;表示帧开始和结束&#xff0c;一字节&#…

实验十一 Java的网络应用

实验目的及要求 目的&#xff1a;熟悉java中网络通讯的基本原理及简单网络程序的开发。 内容&#xff1a;1.编写使用ServerSocket创建服务器端程序&#xff1b; 2.编写使用Socket创建客户器端程序&#xff1b; 3.验证使用套接字实现网络通信的方法。 二、实验环境 计算机…

Codeforces Round 969 (Div. 2) (A~D)

文章目录 A. Doras Set思路code B. Index and Maximum Value思路code C. Dora and C思路code D. Iris and Game on the Tree思路code Codeforces Round 969 (Div. 2) A. Dora’s Set 思路 签到题&#xff0c;把玩一下样例不难发现&#xff1a; 对于 [ l , r ] [l,r] [l,r] …

MVC架构的JSP快速学习(一)

目录 服务相关配置 模型介绍 基础依赖 模型图(抽象) 项目结构 控制器编写 服务相关配置 1. Tomcat配置 http://t.csdnimg.cn/9rILV 2. Maven配置 http://t.csdnimg.cn/REKu9 3. Idea配置 tomcat maven 模型介绍 虽然JSP本身不强制使用MVC&#xff0c;但它通常与Serv…

【MySQL】敏感数据加密后如何模糊查询?

往期文章&#xff1a; 【MySQL】索引 【MySQL】索引底层的数据结构 BTree 【MySQL】SQL语句执行流程 【MySQL】order by 的排序策略 【MySQL】explain 执行计划各字段解析 一、前言 在日常开发中&#xff0c;我们通常需要对敏感数据进行加密存储&#xff0c;如&#xff1a…

封装一个 Vue 3 流程线可视化组件

这个组件展示了一系列带有节点和箭头连接的流程线&#xff0c;并具备不同风险等级的样式和动画效果&#xff0c;非常适合大屏展示项目。 功能概述 这个流程线组件具备以下功能&#xff1a; 动态渲染&#xff1a;根据传入的数据&#xff0c;组件可以自动生成节点和箭头。风险…

后端面试经典问题汇总

后端面试经典问题汇总 后端开发在现代互联网应用中扮演着关键角色&#xff0c;涉及的数据处理、业务逻辑和系统性能等方面在面试中常常会被深入考察。本文将总结一些后端面试中常见的经典问题&#xff0c;并给出简单的解答思路。 1. HTTP 协议 问题&#xff1a;请解释 HTTP …

Linux:五种IO模型

1&#xff1a;五种IO模型 1&#xff1a;阻塞IO 阻塞IO: 在内核将数据准备好之前,系统调用会一直等待.所有的套接字,默认 都是阻塞方式。 2&#xff1a;非阻塞 IO 非阻塞 IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK 错误码。 非阻塞 IO 往往需…

Centos7.9部署Gitlab-ce-16.9

一、环境信息 软件/系统名称版本下载地址备注Centos77.9.2009https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.isogitlab-cegitlab-ce-16.9.1https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.9.1-ce.0.el7.x86_64.rpm…

4款免费录屏工具,哪款更实用?

作为一个经常需要录制教程和游戏视频的UP主&#xff0c;我尝试过市面上不少录屏工具。今天&#xff0c;我就来分享一下我使用过的四款软件录制全屏时的体验感受&#xff0c;看看哪款软件的表现更胜一筹。 一、福昕录屏大师 网址&#xff1a;https://www.foxitsoftware.cn/REC/…

配置 MinGW 以及使用 g++ 编译 C++ 程序

如何在 Windows 上安装和配置 MinGW 以及使用 g 编译 C 程序 (C语言&#xff08;gcc&#xff09;类似 ) 在Windows环境下&#xff0c;使用C进行编程需要一个编译器&#xff0c;而MinGW (Minimalist GNU for Windows) 是一个常用的C/C编译器工具集。对于编程新手来说&#xff0c…

SAP与赛美特MES系统集成案例

一、项目环境 上海某通信有限公司主要产品应用于图像传感器、 图像信号处理芯片、 低功耗芯片、 射频芯片。 为实现生产流程的自动化调度&#xff0c;减少人为干预的错误&#xff0c;保证流程的一致性和合规性&#xff0c;同时也简化操作流程&#xff0c;降低培训成本。&am…

护眼台灯对眼睛好吗?眼科医生推荐的台灯告诉你答案

作为一名家长&#xff0c;我深刻体会到保护孩子眼部健康的重要性。随着科技的迅猛发展&#xff0c;孩子们越来越多地接触并依赖电子设备&#xff0c;如平板电脑、手机和电视&#xff0c;长时间盯着屏幕已成为他们日常生活的一部分。然而&#xff0c;这些屏幕发出的蓝光及闪烁的…

等保测评前的准备工作:企业必知的五大步骤

信息安全等级保护&#xff08;等保&#xff09;测评是企业信息安全合规的重要环节&#xff0c;对于确保企业信息系统的安全性、稳定性和合规性具有重大意义。为了顺利通过等保测评&#xff0c;企业需要提前做好充分的准备。本文将从实战角度出发&#xff0c;详细介绍等保测评前…