MySQL 高阶三 (索引性能分析)

news2024/9/19 17:27:37

执行过程 Explain

 explain select * from student s, course c , student_coure sc where s.id = sc.studentid and c.id = sc.courseid;

在这里插入图片描述
EXPLAIN执行计划各字段含义:

【ld】 id相同,执行顺序从上到下; id不同,值越大,越先执行)。
【select_type】表示SELECT的类型,常见的取值有SIMPLE〈简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION中的第二个或者后面的查询语句)、SUBQUERY (SELECT/WHERE之后包含了子查询)等
【key_len】 用到的索引长度,越短越好。

重点关注:【type】【possible_key】【key】
【type】表示连接类型,性能由好到差的连接类型为null > system > const > eq_ref > ref > range > index > all。
type = null 和 system: 一般不查询业务表,比如 select ‘A’
type = const: 主键或者unquie时,比如,select * from user where id= 1 或者 where idCard = 3423…
type = eq_ref 和 ref: 字段创建了索引 select * from user where name= ‘张三’ name 前提是建立了所以。
type = range ,常见于<、<=、>、>=、between等操作符(explain select * from user where age> 10 and user < 20),前提 age 字段必须是 unique 或者时主键 对数据建立了数据结构,否则依然能是 ALL 全文扫描。
type = index: 创建了索引,但是也是全字段扫描,说明索引效果不佳。
type = all: 没有创建索引的字段查询都是ALL explain select * from user where name= ‘zhangsan’
【possible_key】 可能用的的索引,如果是null 说明没用索引
【key】实际用到的索引

索引使用规则:

索引规则

1、最左前缀法则:

当使用联合索引时:要求查询时必须包含最左边的列:例如:(下面创建的索引  username 是最左边的列)

在这里插入图片描述

EXPLAIN select * from users where username='test' -- 有效

EXPLAIN select * from users where username = 'test' and phone='18061581849'  and age=1 -- 有效

EXPLAIN select * from users where username = 'test' and phone='18061581849'  -- 无效

EXPLAIN select * from users where username='test'  and phone='18061581849'   -- username 有效  phone无效 因为中间缺少 age 导致索引只有执行了部分 可以观察 keylen

EXPLAIN select * from users where username  = 'test' and age >1  and phone='18061581849' -- 部分有效 age使用了范围查询,导致 phone 失效,正确用法,改成 >= 

总结: 联合索引,查询必须包含索引中最左边的列,并且如果跳过中间的列,那么后面的列的索引将会失效。
使用返回查询时,会导致,部分索引失效,正确做法,使用>= 符合代替
下面两张图,的key_len 表名了 生效字段的长度。 username = 195 age = 5 phone = 195 全部生效就是 395
在这里插入图片描述
username + age = 200
在这里插入图片描述

不要在索引列上使用计算操作。

在这里插入图片描述

select * from users where  substring(phone,10,2)='49' -- 使用了计算,导致失效
查询类型要匹配。
EXPLAIN select * from users where phone = 18061581849  -- 无效 本来是字符串 忘记单引号 变成数字类型,导致索引失效。

在这里插入图片描述

模糊查询 ,后面模糊有效,前面无效。

在这里插入图片描述

EXPLAIN select * from users where id=1 or age = 1  -- id 和 age都必须有索引,否则索引失效

注意:如果 age是联合组件,那么age 必须遵从最左前缀法则。否则也无效。

数据分布影响

当前数据:
在这里插入图片描述

EXPLAIN select * from users where phone>='18961511111'  -- 会使用索引,要查询的数据较少时,使用索引效率较高。
EXPLAIN select * from users where phone>='111'  -- 不会使用索引,数据涵盖的范围很大,使用索引效率更低。
--同理  is null 和 is not null 走不走索引取决于查询的结果相对一总数据是 大多数还是少数,少就用索引,反之不用。

索引指定

-- 当表的phone 字段有联合索引和单列索引时,可以指定或者忽略使用该索引
use index(idx_users_phone) -- 建议MySQL使用 idx_users_phone 索引
ignore index(idx_uses_phone) -- 忽略MySQL使用 idx_users_phone 索引
force index(idx_users_phone) -- 强制MySQL使用 idx_users_phone 索引
--使用方式如下:
select * from users use index(idx_users_phone) where phone = '123123123';

为什么不要 select * 因为会触发回表查询,所以如果数据量比较大,查询是可以建立联合索引。增加性能。但要注意,索引太多也会导致插入效率变低。

在这里插入图片描述

EXPLAIN select id,username,nickname FROM users WHERE username = 'test' -- using index 表示只用到idx_phone 索引所以效率很高

在这里插入图片描述

EXPLAIN select id,username,nickname,age FROM users WHERE username = 'test' --age 用到了回表查询
EXPLAIN select * FROM users WHERE username = 'test'  --用到了回表查询

在这里插入图片描述

前缀索引 ,用于txt 大文本索引。

create index idx_users_mark on users(mark(5))  --针对mark字段的前5个字符创建索引,注意如果重复数据太多不具备效果。

EXPLAIN select mark FROM users where mark like "星星%"; -- 仅仅支持后模糊查询。

索引的设计原则:

1、数据量较大(100w条以上),查询较频繁的标建立索引
2、针对 【where】 【order by】【group by】 操作的字段建立索引。
3、尽量选择区分度高的列作为索引。(例如:身份证号 ),重复数据较多的数据,建立索引效果差例如,性别。
4、更具查询的结果列,来创建使用联合索引,避免回表,和遵从最左前缀法则。
5、索引可以提高查询效率,也会影响修改效率。
6、索引列尽量,使用not null约束,可以提升查询效率,因为null在索引中要做特殊处理。

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

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

相关文章

【论文学习与撰写】快捷搜索指令filetype:pdf,搜索引擎关键词搜索pdf格式文件或者word格式文件。文献搜索方法大全。

1、使用快捷搜索指令 在搜索框中输入&#xff1a;关键词空格filetype英文冒号文件格式 &#xff08;如&#xff1a;关键词 filetype:pdf&#xff09;。 通过这种方式&#xff0c;搜索引擎会限定搜索结果只显示 PDF 格式的文件。 比如搜索“2018 年考研英语真题 filetype:pd…

使用 Docker 安装 Ollama 部署本地大模型并接入 One-API

Ollama是一款开源工具&#xff0c;它允许用户在本地便捷地运行多种大型开源模型&#xff0c;包括清华大学的ChatGLM、阿里的千问以及Meta的llama等。目前&#xff0c;Ollama兼容macOS、Linux和Windows三大主流操作系统。本文将介绍如何通过Docker安装Ollama&#xff0c;并将其部…

苹果手机如何备份通讯录?4个方法手把手教你备份

苹果手机通讯录是我们联系亲朋好友的重要工具。然而&#xff0c;如果苹果手机出现损坏或者是丢失的情况&#xff0c;那手机通讯录存储的联系方式也会随之消失。为了避免这种情况的发生&#xff0c;定期备份通讯录变得至关重要&#xff0c;那么&#xff0c;苹果手机如何备份通讯…

基于Nginx进行服务器隐私保护:隐藏真实的服务器IP地址或主机名( 转发代理、服务器的别名)

文章目录 引言I 隐藏站点请求API的真实服务器IP和端口查看主文件配置服务的端口和站点目录的映射配置proxy_pass代理转发代理转发的其他配置【可选】II 服务器主机名处理隐藏真实的服务器主机名判断API请求是哪个服务器处理的III GLC日志中心新增用户信息扩展:在Linux中配置主…

趋势分享|Gartner解读中国企业容器管理新挑战:混合环境、容器安全、AI支持

不少企业都使用容器管理类软件/平台&#xff0c;方便容器环境的部署和运维。而随着应用系统的运行环境逐渐多元化&#xff0c;IT 运维人员仅依靠容器管理产品&#xff0c;已难以同时兼顾多种 IT 基础设施上的多个应用运行环境。同时&#xff0c;AI 等高性能应用场景的兴起&…

探索802.1X:构筑安全网络的认证之盾

在现代网络安全的世界里&#xff0c;有一个极其重要但又常常被忽视的角色&#xff0c;它就是802.1x认证协议。这个协议可以被称作网络安全的守护者&#xff0c;为我们提供了强有力的防护。今天&#xff0c;我们就来深入探讨一下802.1x的原理、应用和测试&#xff0c;看看它是如…

做谷歌seo如何创建良好的用户体验?

Google 希望排名靠前的页面能够为用户提供良好的体验&#xff0c;所以网站提升用户体验很重要。以下是一些实用的小建议&#xff0c;让你的网站更受用户欢迎&#xff0c;并且有助于提升你的 SEO 排名。 现代化设计&#xff1a;确保你的网站设计符合当前的审美和功能趋势。使用高…

基于ssm的毕业回忆录系统的设计与实现

获取源码联系方式请查看文章结尾&#x1f345; 摘 要 随着信息化时代的到来&#xff0c;系统管理都趋向于智能化、系统化&#xff0c;毕业回忆录也不例外&#xff0c;但目前国内的有些学校仍然都使用人工管理&#xff0c;学校规模越来越大&#xff0c;同时信息量也越来越庞大&a…

6.画面渲染及背景-《篮球比赛展示管理系统》现场管理员角色操作手册

通过[特效实验室]及[更换背景] 对整个展示界面的底部图层进行动画渲染。此功能是平台的一大特色。一般用在选手上场或颁奖等。用户可以根据现场情况&#xff0c;妥善发挥。背景图片及其特效&#xff0c;应该在比赛之前设置好。

【信创】Linux操作系统上安装软件包提示依赖不足的解决办法 _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【信创】Linux操作系统上安装软件包提示依赖不足的解决办法 | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在Linux操作系统上安装软件包时遇到依赖不足问题的解决办法的文章。软件包依赖是Linux系统中常见的问题&…

聊聊最近很火的后端即服务

最近&#xff0c;你可能经常听到“后端即服务”&#xff08;Backend as a Service, BaaS&#xff09;这个词。不论是在技术论坛上&#xff0c;还是在开发者社区&#xff0c;BaaS都成了大家讨论的热点。究竟是什么让这个概念如此火爆&#xff1f;今天我们就来聊聊这个话题&#…

CPU内部专用数据通路各阶段的微操作序列利控制信号

1.主存与寄存器之间的数据传送 取指令的示例&#xff1a; (PC)→MARC0有效(MAR)→主存C1有效1→RCU发送读命令M(MAR)→MDRC2有效(MDR)→IRC3有效OP(IR)→CUC4有效(PC)1→PC 由于是专用数据通路&#xff0c;只要两个元器件之间有数据流动就需要一条数据通路&#xff0c;造价昂贵…

基础数据结构——二分算法及时间复杂度

这个算法的前提是&#xff0c;数组是升序排列的 算法描述&#xff1a; i和j是指针可以表示查找范围 m为中间值 当目标值targat比m大时&#xff0c;设置查找范围在m右边&#xff1a;i m-1 当目标值targat比m小时&#xff0c;设置查找范围在m左边&#xff1a;j m1 当targat…

ISO 26262中的失效率计算:IEC 61709-Clause 10_Resistors and resistor networks

目录 概要 1 元器件分类和基准温度 2 失效率的计算 2.1 失效率预测模型 2.2 温度应力系数 2.2.1 温度应力系数计算模型 3.2.2 温度应力系数计算 结语 概要 IEC 61709是国际电工委员会&#xff08;IEC&#xff09;制定的一个标准&#xff0c;即“电子元器件 可靠性 失效…

STM32学习记录-02-GPIO通用输入输出口

mm 1 GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输出时…

揭秘GPT-5,探索未来人工智能的无限可能

引言 在过去的几年里&#xff0c;人工智能领域的快速发展引发了全球范围内的广泛关注和讨论。作为这一浪潮的先锋&#xff0c;OpenAI 推出的 GPT 系列模型已经成为了生成式人工智能的代名词。随着 GPT-4 的发布&#xff0c;它在各种任务中表现出的强大能力进一步巩固了其在行业…

精通推荐算法27:行为序列建模之BST— 代码实现

1 引言 上文 精通推荐算法26&#xff1a;行为序列建模之BST— Transformer建模用户行为序列-CSDN博客 讲解了BST的背景和模型结构&#xff0c;本文给出其代码实现&#xff0c;供大家参考。 2 BST核心代码 Transformer已经成为了算法工程师的必备技能&#xff0c;因此这一节给…

文档在线翻译软件推荐哪些?亲测好用的文档翻译器分享

处暑已至&#xff0c;秋风送爽&#xff0c;正是学习交流的好时节。想象一下&#xff0c;在翻阅外文文献或是与国际友人交流时&#xff0c;如果能有一款便捷的文档翻译软件免费版在手&#xff0c;是不是能让学习之路更加畅通无阻呢&#xff1f; 为了方便大家能够有更高效的学习…

UltraISO刻录Ubuntu镜像制作安装U盘

使用UltraISO 软件来刻录Ubuntu镜像启动盘&#xff1a; 首先下载UltraISO软件&#xff0c;然后点击试用&#xff0c;使用RAW的方式刻录就行&#xff01;&#xff01;&#xff01;

【java】RuoYi-Vue前后端分离版本-登陆请求流程解析

【java】RuoYiBootstrap多模块版本-登陆请求流程解析 这里它用到了一个安全管理框架Spring Security 你可以通过这篇文章《Spring Security 详解》 去了解它&#xff0c;怎么使用 登陆请求流程逻辑图 Created with Raphal 2.3.0 &#xff08;1&#xff09;开始 &#xff08;2&a…