MYSQL explain详解

MySQL中的EXPLAIN的详解 explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。– 表的读取顺序– 数据读取操作的操作类型– 哪些索引可以使用– 哪些索引被实际使用– 表之间的引用– 每张表有多少行被优化器查询EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。版本情况。 阅读详情

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

虽然这篇文章我写的很长,但看起来真的不会困啊,真的都是干货啊!!!!

先解析一条sql语句,看出现什么内容

EXPLAIN SELECT s.uid,s.username,s.name,f.email,f.mobile,f.phone,f.postalcode,f.address
FROM uchome_space AS s,uchome_spacefield AS f
WHERE 1 
AND s.groupid=0
AND s.uid=f.uid

1. id

SELECT识别符。这是SELECT查询序列号。这个不重要,查询序号即为sql语句执行的顺序,看下面这条sql

EXPLAINSELECT *FROM (SELECT* FROMuchome_space LIMIT 10)AS s

它的执行结果为


可以看到这时的id变化了

2.select_type

select类型,它有以下几种值

2.1 simple 它表示简单的select,没有union和子查询

2.2 primary 最外面的select,在有子查询的语句中,最外面的select查询就是primary,上图中就是这样

2.3 union union语句的第二个或者说是后面那一个.现执行一条语句,explain 
select  *  from uchome_space limit 10 union select * from uchome_space limit 10,10

会有如下结果

第二条语句使用了union

2.4 dependent union    UNION中的第二个或后面的SELECT语句,取决于外面的查询

2.5 union result        UNION的结果,如上面所示

还有几个参数,这里就不说了,不重要

3 table

输出的行所用的表,这个参数显而易见,容易理解

4 type

连接类型。有多个参数,先从最佳类型到最差类型介绍 重要且困难

4.1 system

表仅有一行,这是const类型的特列,平时不会出现,这个也可以忽略不计

4.2 const

表最多有一个匹配行,const用于比较primary key 或者unique索引。因为只匹配一行数据,所以很快

记住一定是用到primary key 或者unique,并且只检索出两条数据的 情况下才会是const,看下面这条语句

explain SELECT * FROM `asj_admin_log` limit 1,结果是

虽然只搜索一条数据,但是因为没有用到指定的索引,所以不会使用const.继续看下面这个

explain SELECT * FROM `asj_admin_log` where log_id = 111

log_id是主键,所以使用了const。所以说可以理解为const是最优化的

4.3 eq_ref

对于eq_ref的解释,mysql手册是这样说的:"对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY"。eq_ref可以用于使用=比较带索引的列。看下面的语句

explain select * from uchome_spacefield,uchome_space where uchome_spacefield.uid = uchome_space.uid

得到的结果是下图所示。很明显,mysql使用eq_ref联接来处理uchome_space表。

目前的疑问:

       4.3.1 为什么是只有uchome_space一个表用到了eq_ref,并且sql语句如果变成

       explain select * from uchome_space,uchome_spacefield where uchome_space.uid = uchome_spacefield.uid

       结果还是一样,需要说明的是uid在这两个表中都是primary

4.4 ref 对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。

看下面这条语句 explain select * from uchome_space where uchome_space.friendnum = 0,得到结果如下,这条语句能搜出1w条数据


4.5 ref_or_null 该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。

上面这五种情况都是很理想的索引使用情况

4.6 index_merge 该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。

4.7 unique_subquery 

4.8 index_subquery

4.9 range 给定范围内的检索,使用一个索引来检查行。看下面两条语句

explain select * from uchome_space where uid in (1,2)

explain select * from uchome_space where groupid in (1,2)

uid有索引,groupid没有索引,结果是第一条语句的联接类型是range,第二个是ALL.以为是一定范围所以说像 between也可以这种联接,很明显

explain select * from uchome_space where friendnum = 17

这样的语句是不会使用range的,它会使用更好的联接类型就是上面介绍的ref

4.10 index     该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。(也就是说虽然all和Index都是读全表,但index是从索引中读取的,而all是从硬盘中读的)

当查询只使用作为单索引一部分的列时,MySQL可以使用该联接类型。

4.11  ALL  对于每个来自于先前的表的行组合,进行完整的表扫描。如果表是第一个没标记 const 的表,这通常不好,并且通常在它情况下 很 差。通常可以增加更多的索引而不要使用 ALL ,使得行能基于前面的表中的常数值或列值被检索出。

5 possible_keys 提示使用哪个索引会在该表中找到行,不太重要

6 keys MYSQL使用的索引,简单且重要

7 key_len MYSQL使用的索引长度

8 ref   ref列显示使用哪个列或常数与key一起从表中选择行。

9 rows 显示MYSQL执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引

10 Extra  该列包含MySQL解决查询的详细信息。

10.1 Distinct     MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。一直没见过这个值

10.2 Not exists  

10.3 range checked for each record

没有找到合适的索引

10.4 using filesort    

MYSQL手册是这么解释的“MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行。”目前不太明白

10.5 using index 只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的信息。这个比较容易理解,就是说明是否使用了索引

explain select * from ucspace_uchome where uid = 1的extra为using index(uid建有索引)

explain select count(*) from uchome_space where groupid=1 的extra为using where(groupid未建立索引)

10.6 using temporary

为了解决查询,MySQL需要创建一个临时表来容纳结果。典型情况如查询包含可以按不同情况列出列的GROUP BY和ORDER BY子句时。

出现using temporary就说明语句需要优化了,举个例子来说

EXPLAIN SELECT ads.id FROM ads, city WHERE   city.city_id = 8005   AND ads.status = 'online'   AND city.ads_id=ads.id ORDER BY ads.id desc

id  select_type  table   type    possible_keys   key      key_len  ref                     rows  filtered  Extra                          
------  -----------  ------  ------  --------------  -------  -------  --------------------  ------  --------  -------------------------------
     1  SIMPLE       city   ref     ads_id,city_id  city_id  4        const                   2838    100.00 Using temporary; Using filesort
     1  SIMPLE       ads     eq_ref  PRIMARY         PRIMARY  4        city.ads_id       1    100.00  Using where   

这条语句会使用using temporary,而下面这条语句则不会

EXPLAIN SELECT ads.id FROM ads, city WHERE   city.city_id = 8005   AND ads.status = 'online'   AND city.ads_id=ads.id ORDER BYcity.ads_id desc

id  select_type  table   type    possible_keys   key      key_len  ref                     rows  filtered  Extra                      
------  -----------  ------  ------  --------------  -------  -------  --------------------  ------  --------  ---------------------------
     1  SIMPLE       city   ref     ads_id,city_id  city_id  4        const                   2838    100.00 Using where; Using filesort
     1  SIMPLE       ads    eq_ref  PRIMARY         PRIMARY  4        city.ads_id       1    100.00  Using where   

这是为什么呢?他俩之间只是一个order by不同,MySQL 表关联的算法是 Nest Loop Join,是通过驱动表的结果集作为循环基础数据,然后一条一条地通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。EXPLAIN 结果中,第一行出现的表就是驱动表(Important!)以上两个查询语句,驱动表都是 city,如上面的执行计划所示!

对驱动表可以直接排序,对非驱动表(的字段排序)需要对循环查询的合并结果(临时表)进行排序 (Important!)
因此,order by ads.id desc 时,就要先 using temporary 了!
驱动表的定义
wwh999 在 2006年总结说,当进行多表连接查询时, [驱动表] 的定义为:
1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表];
2)未指定联接条件时,行数少的表为[驱动表](Important!)。
永远用小结果集驱动大结果集

今天学到了一个很重要的一点:当不确定是用哪种类型的join时,让mysql优化器自动去判断,我们只需写select * from t1,t2 where t1.field = t2.field

10.7 using where

WHERE子句用于限制哪一个行匹配下一个表或发送到客户。除非你专门从表中索取或检查所有行,如果Extra值不为Using where并且表联接类型为ALL或index,查询可能会有一些错误。(这个说明不是很理解,因为很多很多语句都会有where条件,而type为all或index只能说明检索的数据多,并不能说明错误,useing where不是很重要,但是很常见)

如果想要使查询尽可能快,应找出Using filesort 和Using temporary的Extra值。

10.8  Using sort_union(...) ,  Using union(...) , Using intersect(...)

这些函数说明如何为index_merge联接类型合并索引扫描

10.9 Using index for group-by

类似于访问表的Using index方式,Using index for group-by表示MySQL发现了一个索引,可以用来查询GROUP BY或DISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。并且,按最有效的方式使用索引,以便对于每个组,只读取少量索引条目。

实例讲解


通过相乘EXPLAIN输出的rows列的所有值,你能得到一个关于一个联接如何的提示。这应该粗略地告诉你MySQL必须检查多少行以执行查询。当你使用max_join_size变量限制查询时,也用这个乘积来确定执行哪个多表SELECT语句。



2017年1.26的拓展      我是无所不能的coder的分界线

回头看看几年前写的这篇博客,真的也是很浅显,只是简单的介绍了explain后每个选项的概念,对于实例没有太多的讲解,而且最重要的是没有指出那种情况下的选项(结合实际情况)才是最优化的,ok,start again

很明显,在所有explain的结果中最重要的要数type/key/rows/extra这4个字段了,那接下来我着重在说一下这四个字段代表的意思及如何优化

现有两个表,一个项目表(project),一个留言表(t_message),用户可以针对不同的项目进行流行操作。

现有一个最基本的联表操作,

EXPLAIN SELECT * FROM project AS p JOIN jmw_message.t_message AS t ON p.id = t.target_id
结果是这样的

出现这种情况是最容易理解的了,因为这只是简单联表查询,没有加任何条件,在实际情况下是不会出现这种sql的。从上图的结果中可以看出mysql对t_message表进行了全表扫描,对project表使用了eq_ref,这符合了mysql对什么情况下会使用到eq_ref的定义,这是非常理想的一种连接类型。

下面我们讨论一个实际情况下会遇到的例子,我们联表取前100条数据,
EXPLAIN SELECT * FROM project AS p JOIN jmw_message.t_message AS t ON p.id = t.target_id LIMIT 100


可以发现,除了影响的行数稍微多了一点(可以忽略,甚至可以理解为没有不同),其他所有的参数都是相同的,也就是说,这种情况下搜索全部数据和搜索100条数据的耗时是一样的,为什么会这样呢?不应该啊!!

这里需要着重说明的是:上面两条语句explain得到的结果是相同的,是因为他们的索引使用策略是相同的,即都没有很好的使用索引,(因为没有where条件和order by语句)但他们的最终耗时是不同的,很明显传输100条数据肯定要比传送1条数据慢。所以,最终耗时会在sending data(用show profile查看)上消耗的比例最大

那实际情况下,最有可能会遇到什么问题呢?

1 根据项目id作为搜索条件(即使用where条件)

2 根据时间或者id来排序(即使用order by条件)

3 根据以上两个

下面我们开始举栗子

《1》搜索最新的100条留言

《2》搜索出某个项目下最新的10条留言

《3》搜索出某个项目最近一个月每天有多少条留言

《4》搜索出最近一个月每天有多少条留言

《5》搜索某个用户今天留言数量

《6》搜索今天有多少条新增留言

下面我们开始吃栗子

《1》搜索最新的100条留言

          EXPLAIN SELECT * FROM project AS p JOIN jmw_message.t_message AS t ON p.id = t.target_id ORDER BY t.id DESC LIMIT 100 ;
          EXPLAIN SELECT * FROM project AS p JOIN jmw_message.t_message AS t ON p.id = t.target_id ORDER BY p.id DESC LIMIT 100

以下两条语句都能实现效果,但索引使用情况却完全不同。第一条语句要比第二条优化的多,



可以看到,第一条语句的type值为index,影响结果即只有100行,也就是说非常合适的使用了索引。正所谓,福无双至祸不单行,当你一个地方出问题的时候,难免其他地方也出问题,因为没有使用合理的索引-->导致全表扫描-->影响结果集太大-->从而导致使用了using temporary和using filesort(这个也很重要)。那这两条语句很明显只有order by条件的一点小小的不同.说实话,我不是很理解为什么会出现这种情况因为这两个条件分表是两个表的主键,都有主键索引,唯一合理的解释可能是因为这时候联表之后t_message是主表(因为他是留言表,一切以他为准),而order by排序当然应该是根据主表的主键拍排序才会使用到索引了,似乎有点牵强,但貌似这么理解没有大毛病

下面着重说一下using temporary和using filesort

using temporary 官方解释:”为了解决查询,MySQL需要创建一个临时表来容纳结果。典型情况如查询包含可以按不同情况列出列的GROUP BY和ORDER BY子句时。“”很明显就是通过where条件一次性检索出来的结果集太大了,内存放不下了,只能通过家里临时表来辅助处理

using filesort 官方解释:“MySQL需要额外的一次传递,以找出如何按排序顺序检索行。通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行”

我这里的理解是:对于order by的字段没有使用到字段,所以使用了using filesort.   这两个问题同时出现的可能性很大啊!!!

《2》搜索出某个项目下最新的10条留言

EXPLAIN SELECT * FROM t_message WHERE target_id = 770 ORDER BY id DESC LIMIT 10;
EXPLAIN SELECT * FROM t_message WHERE target_id = 770 ORDER BY publish_time DESC LIMIT 10

以上两条select语句的执行搜索结果是一样的,但explain分析结果不同,只是因为order by 条件的不同






MySQL进阶系列: 一文详解explain各字段含义 explain有何用处呢:为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。 可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。通过查看执行计划了解执行器是否按照我们想的那样处理SQL。 explain执行计划中包含的信息如下: id: 查询序列号 select_type: 查询类型 table: 表名或者别名 partitions: 匹配的分区 type: 访问类型 possible_keys: 可能用到 阅读详情

相关推荐

MySQL EXPLAIN 详解

EXPLAIN 是 MySQL 提供的性能分析工具,用于查看 SQL 查询的执行计划(即优化器如何执行查询)。它通过模拟查询过程(不实际执行 SQL)返回一个表格,展示索引使用、表连接方式、扫描行数等关键信息,帮助开发者诊断性能瓶颈并优化查询。核心作用:基本语法: FORMAT:指定输出格式,默认是表格形式(TRADITIONAL),JSON 格式包含更详细信息。 示例: 输出结果示例:性能瓶颈难以定位索引优化盲目性资源浪费与扩展性问题维护成本高必用 EXPLAIN 的场景:快速优化步骤:通过 EXPL

qq_34319145的博客 3986

Explain详解与索引最佳实践

Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是 执行这条SQL 注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中 Explain分析示例 参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html 1 示例表: 2 D

weixin_39585051的博客 567

MySQL EXPLAIN解析

通过解析EXPLAIN输出,我们可以评估查询的性能并做出相应的优化决策。EXPLAIN命令是MySQL中一个有用的工具,用于分析和优化查询语句。通过解析EXPLAIN输出,可以了解查询的执行计划、使用的索引和访问方式等关键信息,从而优化查询性能。MySQL的EXPLAIN命令是一个强大的工具,用于分析和优化查询语句。通过使用EXPLAIN,可以深入了解MySQL查询优化器如何执行查询,并提供关于查询执行计划的详细信息。执行EXPLAIN命令后,MySQL将返回一张表格,其中包含有关查询执行计划的详细信息。

SrySmalltalk的博客 273

MySQL-Explain详解

MySQL-Explain详解

fsdfkjai的博客 7万+

ANPC三电平拓扑:两种调制方式解析

ANPC结构是基于“I”型NPC结构(下面讲NPC如不特殊说明,均指的是“I”型结构NPC)发展出来的一种改进型。我们在讲NPC结构的时候会谈到他的一个缺点就是损耗分布不均匀,会导致温升不均衡,进而限制模块的功率输出能力。而ANPC结构由于多了两个开关管以及相应的两个中性点换流回路(如下图),可以更加灵活任意的配置开关管可以使损耗没有那么的不均衡,从而能一定程度上提高模块的输出功率。ANPC拓扑结构图以及增加的环流回路。

IOTBOT的博客 9502

【KBrowser】基于 Kiwi/chromium 制作全新外壳,将 chromium 代码当作 webview 使用,实现可控核替换

chromium 其实只需几步巧妙的架构,就能拿来“换核”,甚至可以插件化,实现类似webview.apk 的效果。重新设计界面,不再是差不多的回声。而 Kiwi 基于 chrome 77 ,只有 50 MB。优势是兼容好、可安装扩展。

sinat_27171121的博客 2029

MySQL中EXPLAIN详解

EXPLAIN作为MySQL的性能分析神器,读懂其结果是很有必要的,然而我在各种搜索引擎上竟然找不到特别完整的解读。都是只有重点,没有细节(例如type的取值不全、Extra缺乏完整的介绍等)。 文章目录 ...

wh柒八九的博客 5921

反激电源RCD尖峰吸收电路的原理以及调试

反激电源RCD尖峰吸收电路的原理以及调试

mnmmnmn的博客 9255

mysql中EXPLAIN详解

大家好。众所周知,MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式。在日常工作过程中,我们可以使用EXPLAIN语句来查看某个查询语句的具体执行计划, 今天我们就来聊一聊EXPLAIN语句。如果我们想看看某个查询的执行计划的话,可以在具体的查询语句前边加一个EXPLAIN,就像这样:下面我们仔细聊一下每个列是干什么的。

qq_41534540的博客 1731

伺服驱动器启用后对传感器线信号干扰的解决方案

在一些Arduino项目中,研究者发现,当伺服电机启动时,传感器信号会出现显著噪声。例如,在一个假肢项目中,研究者使用光电隔离器成功隔离了伺服驱动器对EMG传感器的干扰。然而,当启用伺服驱动器时,传感器线信号常常受到干扰,导致系统性能下降。传感器线信号是传感器输出的电信号,用于测量物理量,如温度、光线或位置。例如,在一些案例中,伺服驱动器的开关操作可能导致传感器信号出现尖峰或波动,特别是在模拟传感器上更为明显。描述: 使用光电隔离或其他隔离技术,分离伺服驱动器和传感器的电气路径,防止直接干扰。

有用好玩有趣的“电”知识 1466

CTF全能工具箱ProV2:集成AI与94GB离线资源库,打造无网环境下的智能解题流水线

CTF全能工具箱ProV2是一款专为线下CTF比赛设计的All-in-One离线解决方案。它集成了94GB的庞大离线资源库,涵盖Web、逆向、Pwn等全方向工具链与知识库,并创新性地内置了本地AI大模型,可在断网环境下提供智能解题辅助,实现从信息收集到漏洞利用的智能流水线作业,极大提升比赛效率。

weixin_29240343的博客 424

mysql之EXPLAIN 详解

EXPLAIN命令是 MySQL 查询优化的 “瑞士军刀”。熟练掌握EXPLAIN的输出字段含义,结合案例分析,能帮助我们深入理解 MySQL 执行计划,快速定位性能瓶颈,找到优化方案,构建高性能的 MySQL 应用。参考:https://relph1119.github.io/mysql-learning-notes/#/mysql ,推荐理解本文之后去看原书,原书有一定深度需前后贯穿仔细理解。

qq_43460315的博客 1846

STM32H7 Flash擦除后数据读取异常的缓存问题解析

本文深入分析了STM32H7系列芯片在Flash擦除后数据读取异常的缓存问题,揭示了由于数据缓存(D-Cache)和指令缓存(I-Cache)导致的数据一致性问题。通过详细的解决方案,包括手动维护缓存一致性和操作期间禁用缓存,帮助开发者有效解决这一常见但棘手的嵌入式开发难题。

weixin_29158413的博客 393

Mysql的Explain详解

Mysql的Explain详解1、什么是Explain?2、Explain的两个变种2.1、explain extended2.2、explain partitions3、explain展示出来的数据列详解3.1、id列3.2、select_type列3.2.1、simple---简单查询3.2.2、primary---复杂查询3.2.3、subquery---子查询3.2.4、derived---衍生查询3.2.5、union---联合查询3.3、table列3.4、type列3.4.1、const, s

qq_41931364的博客 5945

CS算法实战:用MATLAB从零实现SAR点目标成像(附完整代码)

本文详细介绍了如何使用MATLAB从零实现SAR点目标CS成像算法,涵盖Chirp Scaling(CS)算法的核心理论、距离徙动校正(RCMC)和方位压缩等关键步骤。通过完整的代码示例和实战技巧,帮助读者掌握SAR成像处理算法,提升遥感图像处理能力。

weixin_29211309的博客 180

达梦数据库导入报错:[警告]服务器与文件内数据的 CASE_SENSITIVE 参数不匹配,成功终止导入, 但出现警告dimp V8,本地编码:PG_GBK, 导入文件编码:PG_UTF8

达梦数据库管理系统的最新版本是8.0版本,简称DM8。DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM8产品的品质。达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。[警告]服务器与文件内数据的 CASE_SENSITIVE 参数不匹配,成功终止导入, 但出现警告。4.无视警告,输入y,回车。

十三月的博客 1万+

mysql EXPLAIN详解

使用EXPLAIN语句可以帮助你查看查询是否有效地利用了索引,通过理解执行计划,你可以优化查询,避免全表扫描,提高查询效率。如果查询没有使用索引或索引没有发挥预期作用,可能需要创建新的索引或调整现有索引。

qq_35082497的博客 1244

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【MySQL01】【 Explain 命令详解】

最近在读《MySQL 是怎样运行的》一书,后续会随机将书中部分内容记录下来作为学习笔记,部分内容经过个人删改,因此可能存在错误,如想详细了解相关内容强烈推荐阅读该书。

猫吻鱼的博客 1329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

一文了解MySQL explain详解

MySQL 的 EXPLAIN 是一个用于查询优化的关键字。它用于分析和评估查询语句的执行计划,帮助开发者理解查询语句的性能问题以及优化查询的方式。使用EXPLAIN关键字,可以获取关于查询执行计划的详细信息,包括表的访问顺序、连接方式、索引使用情况等,这些信息能够帮助你确定查询是否有效利用了索引,以及是否存在潜在的性能瓶颈。要使用EXPLAIN执行以上语句后,MySQL会返回一个结果集,包含了查询执行计划的详细信息。

时间如瑾 代码如诗 1641

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【MySQL之Explain详解】

本文介绍了MySQL中EXPLAIN关键字的作用及返回字段含义。EXPLAIN用于分析SQL执行计划,帮助优化慢查询。重点解析了id(执行顺序)、select_type(查询类型)、table(访问表)、type(访问方式)等关键列

qq_40864151的博客 1769

MySQL Explain详解

最近慢慢接触MySQL,了解如何优化它也迫在眉睫了,话说工欲善其事,必先利其器。最近我就打算了解下几个优化MySQL中经常用到的工具。今天就简单介绍下EXPLAIN。 内容导航 idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra   环境准备 MySQL版本: 创建测试表 CREATE TABLE peo

hansam 的专栏 6856

mysql 的explain

就像书架上的书,你要找的内容可能需要翻阅很多本书,rows 就是 MySQL 估算需要翻阅的数量。行数越少,效率越高。书架上有多个索引卡片(possible_keys),key 是最终选中的卡片,告诉你用哪个索引来找书。假设书架的索引卡片按字母排序,ref 就是你在索引卡片上找的具体字母,比如“找姓氏以 A 开头的书”。想象你在书架上找一本书(查询数据),书架上有许多索引卡片(索引),possible_keys 就是。想象你是一名考古学家,在沙漠中寻找宝藏(数据查询),type 就是你选择的。

qq_39201004的博客 1764

Mysql Explain详解

一、背景 在日常工作中,可能会收到一些超时或慢响应的告警,最根到底可能是因为一些执行时间比较的SQL语句,这就跟我们平时开发需要注意细节相关了。那么找到这些SQL语句怎么优化呢?到底是哪里的问题导致SQL执行时间长呢? 这个时候Explain命令尤其重要,它可以查看该SQL语句有没有使用上索引、使用了哪个索引、有没有做全表扫描、有没有使用临时表等等。下面都是基于mysql 8进行案例说明的。 ...

e5354966xieo1的博客 363

MySQL:MySQL的EXPLAIN各字段含义详解

MySQL中的explain执行计划中的字段详解。

永远保持随时离开的技术能力! 2169

MySQL EXPLAIN 命令详解学习

MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP)。这条命令的输出结果能够让我们了解MySQL 优化器是如何执行 SQL 语句的。这条命令并没有提供任何调整建议,但它能够提供重要的信息帮助你做出调优决策。 1 语法 MySQL 的EXPLAIN 语法可以运行在SELECT 语句或者特定表上。如果作用在表上,那么此命令等同于DE

邱建松的专栏 2万+
上一篇: window.opener.document.getElementById(“a”)用标准的Jquery 语言怎么写
下一篇: 【web前端】可筛选[输入搜索]的select(重写)
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值