索引优化分析(二)

《MySQL》第六篇 索引优化场景分析二 六. 索引优化 - 分页 七. 索引优化 - Join关联查询 八. 索引优化 - 其他场景 六. 索引优化 - 分页 七. 索引优化 - Join关联查询 八. 索引优化 - 其他场景 1. 尽量使用覆盖索引(索引列包含查询列),减少 select * 语句 ## t_employees 表的索引是`name`, `age`, `position` 组合的联合索引 ## 查询结果字段刚好是索引字段,使用了覆盖索引 EXPLAIN SELECT name,age,position FROM t_employ 阅读详情

一、SQL语句的性能分析(Explain)

1、查看SQL语句的执行计划

      使用explain关键词可以模拟优化器执行SQL查询语句,从而知道Mysql是如何处理sql语句,分析出查询语句或表结构的性能瓶颈,使用语法如下:

explain + sql语句:explain select * from table_name

查询结果如下:

2、Explain+SQL语句结果分析

(1)id:selectct 查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序(查询顺序)

(a)id相同,执行顺序由上至下     
(b)id不同,如果是子查询,id的序号会递增,id值越大,优先级越高,越先被执行
(c)id相同不同,同时存在

(2)select_type:表示查询的类型

1、SIMPLE:简单的select查询,查询中不包含子查询或union
2、PRIMARY:查询中若包含任何复杂的子部分,最外层查询则标记为primary
3、SUBQUERY:在select或where列表中包含了子查询
4、DERIVED:在from列表中包含的子查询被标记为derived(衍生),mysql会递归执行这些子查询,把结果放在临时表里
5、UNION:若第二个select出现在union之后,则被标记为union
6、UNION RESULT:从union表中获取结果的select

(3)table:显示这一行的数据是于哪张表的来自

(4) partitions:使用的哪个分区,需要结合表分区才可以看到

(5)type:表示按某种类型来查询,例如按照索引类型查找,按照范围查找

        该值表示查询的sql语句好坏,从最好到最差依次为:system>const>eq_ref>ref>range>index>ALL

1、system:表中只有一行记录,这是const类型的特列
2、const:表示通过索引一次就能查到了,const用于比较primary key或unique索引,因为只匹配一行数据,所以很快,如将主键置于where列表中,mysql就能将该查询转换为一个常量
3、eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条与之匹配常见于主键或唯一索引扫描
4、ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独的行,然而,它可能找到多个符合条件的行,所以它应该属于查找和扫描的混合体
5、range:只检索给定范围的行,使用一个索引来选择行,一般就是在where语句中出现betwent、<、>、in等查询中,这种范围扫描索引扫描比全表扫描要好,因为它只需要开始与索引的某一个点,而结束于另一个点,不用扫描全部索引
6、index:full index scan,index与all区别为index类型只遍历索引树,这通常比all快,因为索引文件通常比数据文件小
7、all:full table scan,将遍历全表以找到匹配的行
备注:一般来说,保证查询至少到达range级别,最好能到达ref

(6)possible_keys:显示可能应用在该表中的索引,如果是多个索引的话,用逗号隔开,但查询时不一定被实际应用到

(7)key:查询时实际使用到的索引,如果为null,则没有使用到索引;若查询时使用了覆盖索引,则该索引和查询的select字段重叠

(8)key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引长的,长度越短越好

(9)ref:显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或常数被用于查找索引列上的值

(10)rows:查询时大致估算出找到所需的记录,所需要读取的总行数

(11)filtered:通过过滤条件之后对比总数的百分比

(12)Extra:包含不适合在其他列中显示但十分重要的额外信息

  • Using filesort:说明mysql会对数据使用的一个外部的索引排序,而不是按照表内的索引顺序进行读取,mysql中无法利用索引完成的排序操作称为"文件排序",出现该关键词,需要优化处理。(组合索引排序时,不能跳过前面索引排序,按索引顺序进行排序,不产生索引排序冲突)

  • Using temporary:使用了临时表保存中间结果,mysql在对查询结果排序时使用了临时表,常见于排序order by和分组查询group by(一般group by都会排序产生临时表)。出现该关键词,需要优化处理。

  • Using index:表示相应的select操作中使用了覆盖索引,避免访问了表的数据行,效率不错。覆盖索引:就是select的数据列只用从索引中就能够取得,不必读取数据行,mysql可以利用索引返回select列表中的字段,而不必根据索引(物理地址)再次读取数据文件,即查询列要被所建的索引覆盖。

  • Using where:表明使用了where过滤。
  • Using join buffer:使用了连接缓存。
  • impossible where :where子句的值总是false,不能用来获取任何数据,即条件永远不成立。
  • distinct:优化distinct操作,在找到第一匹配的数据后立即停止找同样值的动作。

3、Explain性能分析的作用

(1)了解表的读取顺序(表的执行顺序)>id

(2)数据读取操作的操作类型(如:子查询等)>select_type、type

(3)查询中哪些索引可以使用  >possible_keys

(4)查询中哪些索引被实际使用到 >key

(5)表之间的引用 >table

(6)每张表有多少行被优化器查询 >rows

二、索引优化

1、索引失效情况如下类型(应该避免)

(1)全值匹配我最爱,即where条件按照索引的顺序查询,效果最佳(组合索引时,最前索引不能丢)
(2)最佳左前辍法则,如果为组合索引,要遵守最左前辍法则,查询时从索引的最左前列开始并且不跳过索引中的列(不按索引顺序检索容易导致索引失效)
(3)不在索引列上做任何的操作(计算、函数、类型转换等),会导致索引失效而转向全表扫描
(4)存储引擎不能使用索引中范围条件右边的列,即索引中查询条件存在范围时,索引将会失效
(5)尽量使用覆盖索引,即只访问索引的查询(索引列跟查询列一致),减少select * 
(6)mysql在使用不等于(!= 或<>)的时候无法使用索引会导致全表扫描(可通过覆盖索引方式解决)
(7)is null或is not null也是无法使用索引的(可通过覆盖索引方式解决)
(8)like以通配符开头('%test%'),mysql索引失效会变成全表扫描,但是索引支持右模糊查询,即like 'test%'(可通过覆盖索引方式解决)
(9)字符串不加单引号索引失效(mysql会自动类型转换,导致索引失效)
(10)少用or,用它来连接时会索引失效(可通过覆盖索引方式解决)

 2、索引创建、优化建议

(1)经常作为条件的字段应添加索引,多个则创建组合索引
(2)多表关联查询时,保证join语句中被驱动表上join条件字段已经被索引(创建索引)
(3)永远用小结果集驱动大的结果集(即小表驱动大表)

 

摄像头visio_最全面弱电智能VISIO图标集(百个),高大上方案就靠这个了 原标题:最全面弱电智能VISIO图标集(百个),高大上方案就靠这个了不会用Visio,Visio画拓扑画的很丑,怎么办?本期sin66小编免费分享一份最全面的弱电智能VISIO图标集(百个)给大家,以后画拓扑、做方案,直接高大上起来!需要本期资料直接看文末!!接下来我们一起看一下这些Visio图标大全:我们从下图可以看出前端设备主要是由枪机,筒机,无线摄像头,半球,球机,USB摄像头等构成,对于绘... 阅读详情

相关推荐

Robot Arm 机械臂源码解析

由于我们用的是步进电机,运动的时候是一步一步的,并不是平滑的,这里假设在一个平面上面,一个x步进电机,一个y步进电机。那么放大它们所走的轨迹就会是阶梯状的。而它们也只能沿着网格运动。相当于有了一个最小的分辨率,这个分辨率就是一步。如下图所示,如果x,y电机同时走就能走出45度的斜线。在三维空间里面运动也是如此,你应该可以想象的出来;首先,是updateActualPosition,用来时时更新此时的差补位置,得到的是一个路径与时间t的函数(其中路径的范围为0,1,时间范围为0,dist/v)...

爱吃炸鸡的小猪's blog 1万+

针对索引对数据库优化

一、删除陈旧的冗余数据 1、对于已删除标记的数据可以定期清除。 二、建立有效索引 1、where 和order by 后面的字段建立联合索引 1) 最左前缀匹配原则,组合索引非常重要的原则,where子句中使用最频繁的一列放在最左边,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以

naruto66122299的博客 480

接口自动化测试如何做?测试老鸟总结,接口测试数据构造大全......

接口参数的数据获取:接口文档:接口文档通常会包含接口需要的请求参数和返回结果的格式、类型等信息;测试用例设计:根据测试用例设计的需求,可以确定需要哪些请求参数以及期望的响应结果;业务数据:从实际业务场景中获取数据,以确保测试数据的真实性和代表性;数据库:从数据库中获取数据,作为接口测试的输入参数;随机数据生成器:通过随机数据生成器生成测试数据,以增加测试用例的多样性和覆盖率。在选择数据来源时,需要根据具体情况进行选择。如果有可靠的接口文档,可以直接从文档中获取请求参数和预期结果;

798

搜索引擎优化基础,第 3 部分: 让 Web 页面进入搜索引擎索引

作为一名 Web 站点开发人员,使您的 Web 站点得到搜索引擎的关注是获得成功的关键因素之一。在这个共分四部分的系列中,您将学习对 Web 站点进行有机优化所需的基础知识。在这个系列的第 3 部分中,您将学习如何让 Web 站点的页面进入搜索索引。 Web 搜索是热点,而且越来越热门。四分之三的 Web 用户经常进行搜索,64% 的 Web 用户以搜索作为寻找信息的主要方法(参见 参考...

johnny_hg的专栏 721

间充质干细胞衰老机制与抗衰老干预策略研究

干细胞技术在再生医学领域具有广阔应用前景,其中间充质干细胞(MSCs)因其多向分化潜能和免疫调节特性备受关注。细胞衰老是影响干细胞治疗效果的共性难题,表现为增殖能力下降、端粒缩短等特征。通过表观遗传学分析发现,衰老MSCs存在DNA甲基化异常和组蛋白修饰改变;线粒体功能障碍导致ATP产量锐减,ROS累积显著增加。针对这些机制,研究者开发了包括小分子化合物筛选、CRISPR基因编辑和三维培养优化在内的多种干预策略。这些技术在组织修复、抗衰老治疗等应用场景中展现出重要价值,例如可提升心肌梗死修复效率2.3倍,缩

weixin_33502772的博客 229

QtNodeEditor实战:构建高效可视化编程环境的完整指南

本文是QtNodeEditor实战的完整指南,详细介绍了如何利用这一基于Qt框架的可视化编程工具构建高效节点编辑器。内容涵盖从快速集成、自定义节点模型到深入理解MVC数据流架构,并提供了样式定制、场景序列化、动态端口等高级功能的实现方法,帮助开发者快速搭建灵活、可维护的可视化编程环境。

lemon的博客 702

mysql优化之搜索引擎_MySQL之索引优化

一、Table DemoCREATE TABLE `employees` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名',`age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',`position` varchar(20) NO...

weixin_31642161的博客 261

手把手教你学 Simulink (1.3)--Simulink 的模块库及其模块介绍

Simulink 提供了丰富的模块库,涵盖了从基本的信号生成和处理到复杂的数学运算和系统建模的各种功能。通过熟悉这些模块库及其模块,你可以更高效地构建和仿真动态系统。

MHD0815的博客 5152

SQl语句之 BETWEEN 用法

between de的英语意思是介于两者之间,在sql中的意思是两个值之间的数据范围。这些值可以是数值、文本或者日期。与and 一起使用 例句1:(筛选出一张表中以某个字段两个值之间的数据范围) select * from tab1    where name      between value1 and value2 (筛选出的条件中包括value1,但是不包括vaule2,也就是说并不是

浮萍的博客 9万+

AI上推荐 之 协同过滤

㐇

Miracle8070 1万+

三步实现Java分布式追踪:像“开灯”一样简单

摘要: 本文通过三步实现Java分布式追踪: 引入依赖:配置Spring Cloud Sleuth+Zipkin,自动埋点无需代码侵入; 启动服务:REST接口自动生成Trace/Span ID,日志可验证; 可视化分析:通过Zipkin UI查看调用链耗时和拓扑关系。 亮点:AOP自动埋点、零业务代码修改、支持多服务链路追踪,助力快速定位性能瓶颈。适用于微服务诊断,生产环境可调整采样率平衡性能。(150字)

墨夶的博客 2711

二、索引优化分析

文章目录一、性能下降SQL慢 执行时间长 等待时间长二、SQL预热:常见通用的Join查询1、Join图2、建表SQL3、7种JOIN(1)内连接(2)左连接(3)列出所有门派(4)不含空的左连接(5)为空的左连接(6)全连接(7)无交集的全连接(8)增加掌门字段(9)求各个门派对应的掌门人名称(10)求所有当上掌门人的平均年龄三、索引简介1、是什么1.1 MySQL官方对索引的定义1.2 索引的...

爱码者的博客 966

《低功耗方法学》翻译——第一章:介绍

第一章:介绍

记录所学,分享知识,结识挚友 2069

mysql的索引分析_MySQL的索引优化分析(二)

一、索引优化1,单表索引优化建表CREATE TABLE IF NOT EXISTSarticle(idINT(10) UNSIGNED NOT NULL PRIMARY KEYAUTO_INCREMENT,author_idINT(10) UNSIGNED NOT NULL,category_idINT(10) UNSIGNED NOT NULL,viewsINT(10) UNSIGNED NO...

weixin_42518874的博客 104

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Day162.索引优化分析②[索引优化、索引失效] -MySql高级

第 2 章 索引优化分析 5、索引优化 5.1、单表索引优化 单表索引优化分析 创建表 建表 SQL CREATE TABLE IF NOT EXISTS article( id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, author_id INT(10) UNSIGNED NOT NULL, category_id INT(10) UNSIGNED NOT NULL, views INT(10) UNSIGNED NOT N

阿昌爱Java 592

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Explain分析-Mysql索引优化(二)

常见sql深入优化及索引设计原则

Myname_China的博客 1190

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SQL 优化之该走索引却不走索引的分析(二)

<br />SQL优化器简介 <br />基于规则的优化器 <br />。总是使用索引 <br />。总是从驱动表开始(from子句最右边的表) <br />。只有在不可避免的情况下,才使用全表扫描 <br />。任何索引都可以 <br />基于成本的优化器 <br />。需要表、索引的统计资料 <br />Analyze table customer compute statistics; <br />Analyze table customer estimate statistics sample 50

无双小宝 1404

mysql高级篇(二)mysql索引优化分析

文章目录第六章索引优化分析6.1索引简介6.1.1是什么6.1.2优势6.1.3劣势6.1.4mysql索引结构6.1.4.1BTree索引6.1.4.2B+Tree索引6.1.4.3聚簇索引与非聚簇索引6.1.5 mysql索引分类6.1.5.1单值索引6.1.5.2 唯一索引6.1.5.3主键索引6.1.5.4复合索引6.1.5.5 基本语法6.1.6哪些情况需要创建索引6.1.7哪些情况不要创建索引6.2 Explain性能分析6.2.1是什么(查看执行计划)6.2.2能干嘛6.2.3怎么玩6.2.4

weixin_45077780的博客 832

MySQL -二(索引优化分析)

1、性能下降,SQL慢,执行时间长,等待时间长 1)、查询数据多 2)、关联太多的表,太多join 3)、没有利用到索引 单值 复合 4)、服务器调优以及各个参数设置 2、常见的join查询 1、SQL执行顺序 手写: 2、机读 3、总结 mysql的SQL执行顺序是 先执行from(笛卡尔积) -->on(主表保留)-->join &&am...

CB_Beginner的博客 669

MySQL高级篇笔记(二)索引优化分析

二、索引优化分析 1、性能下降、SQL慢、执行时间长、等待时间长的原因 查询语句写的差 索引失效 单值索引:新建索引的语句只实施在一列上 复合索引:在多个列上建立索引 关联查询太多join(设计缺陷或不得已的需求) 服务器调优及各个参数设置(缓冲\线程数等) 2、索引简介 (1)索引是什么 MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构,所以索引的本质是:数据结构,可以理解为排好序的快速查找数据结构 索引的目的在于提高查询效率,可以类比字典, 如果要查“mysql”这个

郑皓云的博客 452

MySql高级-索引优化分析(二)

2.1 性能下降SQL慢执行时间长,等待时间长 数据过多:分库分表 关联了太多的表,太多join:SQL优化 没有充分利用到索引:索引建立 服务器调优及各个参数设置:调整my.cnf 2.2 SQL预热:常见通用的Join查询 2.2.1 Join图 ‘ 2.2.2 建表SQL CREATE TABLE `t_dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARC

weixin_41979002的博客 462

MySQL索引优化分析(二)

性能分析 MySQL常见瓶颈 CPU:cpu饱和的时候一般发生在数据装入内存或从磁盘上读取数据的时候 IO:磁盘I/O瓶颈发生在装入数据远大于内存容量的时候 服务器硬件的性能瓶颈:top,free,iostat,vmstat来查看系统的性能瓶颈 Explain 1.explain是什么 ?(查看执行计划) 使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理你的sql语句的。分析你的查询语句或表的性能瓶颈 2.explain能干嘛? - 表的读取顺序 - 数据读取

weixin_45923962的博客 153

MySQL高级---索引优化分析(Explain性能分析 二)

7、key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。key_len字段能够帮你检查是否充分的利用上了索引。ken_len越长,说明索引使用的越充分。 如何计算: ①先看索引上字段的类型+长度比如int=4;varchar(20)=20;char(20)=20 ②如果是varchar或者char这种字符串字段,视字符集要乘不同的值,比如utf-8要乘3,GBK要乘2...

我是太阳 2万+

MySQL索引(二):精谈mysql索引分析与查询优化

精谈mysql索引分析与查询优化前言索引分析善用EXPLAIN回表查询覆盖索引最左前缀原则LIKE查询NULL查询索引与排序查询优化慢查询定位慢查询优化索引和慢查询提高索引过滤性慢查询原因总结分页查询优化一般性分页分页优化方案总结 前言 上节介绍了mysql 的索引的类型和查询原理,这节主要介绍下mysql的索引分析与优化。 索引分析 善用EXPLAIN MySQL 提供了一个 EXPLAIN 命令,它可以对 SELECT 语句进行分析,并输出 SELECT 执行的详细信息,供开发人员有针对性的优化。例如:

200

【MySQL篇】MySQL索引优化分析与实战(二)

1. 分页查询优化详解 2. 表JOIN关联原理详解及优化 3. 表COUNT查询优化 4. MySQL数据类型选择分析

qq_44781222的博客 1204

数据库高级知识——索引优化分析(二)

文章目录4.性能分析4.1 MySQL常见瓶颈4.2 Explain5.查询优化5.1 索引失效5.2 索引优化 4.性能分析 4.1 MySQL常见瓶颈 CPU :SQL中对大量数据进行比较、关联、排序、分组 IO:实例内存满足不了缓存数据或排序等需要,导致产生大量 物理 IO。查询执行效率低,扫描过多数据行。 锁:不适宜的锁的设置,导致线程阻塞,性能下降。死锁,线程之间交叉调用资源,导致死锁,程序卡住。 服务器硬件的性能瓶颈:top,free, iostat和vmstat来查看系统的性能状态 4.2

zxr916的博客 195
上一篇: 索引优化分析(一)
下一篇: 索引优化分析(三)
Array*
博客等级 码龄9年 2粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值