MySQL如何使用EXPLAIN优化SQL:输出内容参考手册

MySQL如何使用EXPLAIN优化SQL:输出内容参考手册

这篇文章差不多是MySQL官网的翻译版本,有任何不清楚的,或者翻译不到位的地方,都可以直接去官网查询原文档。

MySQL 8.0 Reference Manual - EXPLAIN Output Format

EXPLAIN语句提供了有关MySQL如何执行语句的信息。EXPLAIN适用于SELECT、DELETE、INSERT、REPLACE和UPDATE语句。

EXPLAIN为SELECT语句中使用的每个表返回一行信息。它按照MySQL处理语句时读取它们的顺序列出表。这意味着MySQL先从第一个表中读取一行,然后在第二个表中找到匹配的行,接着在第三个表中找到匹配的行,依此类推。当所有表都被处理完毕时,MySQL输出选定的列,并通过表列表回溯,直到找到一个表,该表有更多匹配的行。接下来将从该表中读取下一行,并继续处理下一个表。

EXPLAIN的每个输出行提供有关一个表的信息。每行包含在表10.1“EXPLAIN输出列”中总结的值,并在表后面的详细描述中进行描述。列名显示在表的第一列中;当使用FORMAT=JSON时,第二列提供输出中显示的等效属性名称。

列名JSON 名称含义
idselect_idSELECT标识符
select_typeNoneSELECT类型
tabletable_name输出行对应的表
partitionspartitions匹配的分区
typeaccess_type连接类型
possible_keyspossible_keys可选择的索引
keykey实际选择的索引
key_lenkey_length选择的键的长度
refref与索引进行比较的列
rowsrows要检查的行的估计值
filteredfiltered表条件过滤的行的百分比
ExtraNone附加信息

备注: 如果JSON属性为NULL,则不会在JSON格式的EXPLAIN输出中显示。

字段值解释

id (JSON名称: select_id)

SELECT标识符。这是查询中SELECT语句的顺序号。如果行引用其他行的联合结果,则该值可以为NULL。在这种情况下,table列显示类似于<unionM,N>的值,表示该行引用具有id值为M和N的行的联合。

select_type (JSON名称: 无)

SELECT的类型,可以是下表中显示的任何类型。JSON格式的EXPLAIN将SELECT类型作为query_block的属性公开,除非它是SIMPLE或PRIMARY。表中还显示了JSON名称(如果适用)。

select_type值JSON名称含义
SIMPLENone简单SELECT(不使用UNION或子查询)
PRIMARYNone最外层SELECT
UNIONNoneUNION中的第二个或后续SELECT语句
DEPENDENT UNIONdependent (true)UNION中的第二个或后续SELECT语句,依赖于外部查询
UNION RESULTunion_resultUNION的结果
SUBQUERYNone子查询中的第一个SELECT
DEPENDENT SUBQUERYdependent (true)子查询中的第一个SELECT,依赖于外部查询
DERIVEDNone派生表
DEPENDENT DERIVEDdependent (true)依赖于另一个表的派生表
MATERIALIZEDmaterialized_from_subquery物化子查询
UNCACHEABLE SUBQUERYcacheable (false)无法缓存的子查询,对于外部查询的每一行都必须重新评估
UNCACHEABLE UNIONcacheable (false)属于无法缓存的子查询的UNION中的第二个或后续SELECT语句(参见UNCACHEABLE SUBQUERY)

DEPENDENT通常表示使用相关子查询。

DEPENDENT SUBQUERY评估与UNCACHEABLE SUBQUERY评估不同。对于DEPENDENT SUBQUERY,子查询仅针对其外部上下文的不同变量值集合重新评估一次。对于UNCACHEABLE SUBQUERY,子查询对外部上下文的每一行重新评估一次。

当您使用EXPLAIN指定FORMAT=JSON时,输出没有直接相当于select_type的单个属性;query_block属性对应于给定的SELECT。大多数SELECT子查询类型的等效属性在适当时可用(例如,MATERIALIZED的materialized_from_subquery),并在适当时显示。没有JSON等效项简单或PRIMARY。

非SELECT语句的select_type值显示受影响表的语句类型。例如,DELETE语句的select_type是DELETE。

table (JSON名称: table_name)

输出行引用的表的名称。这也可以是以下值之一:

<unionM,N>:该行引用具有id值为M和N的行的联合。

:该行引用id值为N的行的派生表结果。派生表可能是由FROM子句中的子查询产生的。

:该行引用id值为N的行的物化子查询结果。

partitions (JSON名称: partitions)

查询匹配的记录将来自哪些分区。对于非分区表,该值为NULL。

type (JSON名称: access_type)

连接类型。

possible_keys (JSON名称: possible_keys)

possible_keys列指示MySQL可以从中选择以查找此表中的行的索引。请注意,此列与EXPLAIN输出中显示的表的顺序完全无关。这意味着possible_keys中的一些键在实际中可能无法使用。

如果此列为NULL(或在JSON格式的输出中未定义),则表示没有相关索引。在这种情况下,您可以通过检查WHERE子句是否引用了某些适合索引的列或列来改善查询性能。如果是这样,请创建一个适当的索引并再次使用EXPLAIN检查查询。

要查看表有哪些索引,可以使用SHOW INDEX FROM tbl_name

key (JSON名称: key)

key列指示MySQL实际决定使用的键(索引)。如果MySQL决定使用possible_keys索引之一来查找行,则该索引将列为key值。

如果key命名了一个在possible_keys值中不存在的索引,这是可能的。这可能发生在possible_keys索引中没有一个适合查找行,但查询选择的所有列都是某个其他索引的列的情况下。也就是说,命名的索引覆盖了所选列,因此虽然它不用于确定要检索哪些行,但索引扫描比数据行扫描更有效。

对于InnoDB,即使查询还选择了主键,辅助索引也可能覆盖所选列,因为InnoDB将主键值存储在每个辅助索引中。如果key为NULL,MySQL没有找到用于更有效执行查询的索引。

要强制MySQL使用或忽略possible_keys列中列出的索引,请在查询中使用FORCE INDEX、USE INDEX或IGNORE INDEX。

对于MyISAM表,运行ANALYZE TABLE有助于优化器选择更好的索引。对于MyISAM表,myisamchk --analyze做同样的事情。

key_len (JSON名称: key_length)

key_len列指示MySQL决定使用的键的长度。key_len的值使您能够确定MySQL实际使用了多部分键的多少部分。如果key列显示NULL,则key_len列也显示NULL。

由于键存储格式,可为NULL的列的键长度比NOT NULL列的键长度大1。

ref (JSON名称: ref)

ref列显示与key列中命名的索引进行比较以选择表中的行的哪些列或常量。

如果值是func,则使用的值是某个函数的结果。要查看哪个函数,请在EXPLAIN之后使用SHOW WARNINGS查看扩展的EXPLAIN输出。该函数实际上可能是一个运算符,例如一个算术运算符。

rows (JSON名称: rows)

rows列指示MySQL认为必须检查以执行查询的行数。

对于InnoDB表,这个数字是一个估计值,可能不总是精确的。

filtered (JSON名称: filtered)

filtered列指示表条件过滤的行的估计百分比。最大值是100,这意味着没有进行行过滤。从100递减的值表明进行了越来越多的过滤。rows显示估计的检查行数,rows × filtered显示与下一个表连接的行数。例如,如果rows是1000,filtered是50.00(50%),则与下一个表连接的行数是1000 × 50% = 500。

Extra (JSON名称: 无)

此列包含有关MySQL如何解析查询的附加信息。

没有直接对应于Extra列的单个JSON属性;然而,此列中可能出现的值作为JSON属性公开,或作为message属性的文本。

EXPLAIN连接类型

EXPLAIN输出的type列描述了表是如何连接的。在JSON格式的输出中,这些值作为access_type属性的值出现。下面的列表按从最好到最差的顺序描述了连接类型:

system

表只有一行(=系统表)。这是const连接类型的特例。

const

表最多有一行匹配的行,在查询开始时读取。因为只有一行,所以此行中的列值可以被优化器的其余部分视为常量。const表非常快,因为它们只被读取一次。

当您将PRIMARY KEY或UNIQUE索引的所有部分与常量值进行比较时,会使用const。在以下查询中,tbl_name可以用作const表:

SELECT * FROM tbl_name WHERE primary_key=1;SELECT * FROM tbl_nameWHERE primary_key_part1=1 AND primary_key_part2=2;

eq_ref

对于前面表的每个行组合,从这个表中读取一行。除了system和const类型之外,这是最好的可能的连接类型。当索引的所有部分都被连接使用,并且索引是PRIMARY KEY或UNIQUE NOT NULL索引时,会使用eq_ref。

eq_ref可用于使用=操作符比较的索引列。比较值可以是常量或使用在此表之前读取的表的列的表达式。在以下示例中,MySQL可以使用eq_ref连接来处理ref_table:

SELECT * FROM ref_table,other_tableWHERE ref_table.key_column=other_table.column;SELECT * FROM ref_table,other_tableWHERE ref_table.key_column_part1=other_table.columnAND ref_table.key_column_part2=1;

ref

对于前面表的每个行组合,从这个表中读取所有具有匹配索引值的行。如果连接只使用键的最左前缀或如果键不是PRIMARY KEY或UNIQUE索引(换句话说,如果连接不能基于键值选择单个行),则使用ref。如果使用的键只匹配少数几行,这是一个好的连接类型。

ref可用于使用=或<=>操作符比较的索引列。在以下示例中,MySQL可以使用ref连接来处理ref_table:

SELECT * FROM ref_table WHERE key_column=expr;SELECT * FROM ref_table,other_tableWHERE ref_table.key_column=other_table.column;SELECT * FROM ref_table,other_tableWHERE ref_table.key_column_part1=other_table.columnAND ref_table.key_column_part2=1;

fulltext

连接使用FULLTEXT索引执行。

ref_or_null

这种连接类型类似于ref,但是MySQL会额外搜索包含NULL值的行。这种连接类型优化最常用于解决子查询。在以下示例中,MySQL可以使用ref_or_null连接来处理ref_table:

SELECT * FROM ref_tableWHERE key_column=expr OR key_column IS NULL;

index_merge

这种连接类型表示使用了索引合并优化。在这种情况下,输出行中的key列包含了使用的索引列表,key_len包含了使用的索引的最长键部分列表。

unique_subquery

这种类型替换了某些形式的IN子查询的eq_ref:

value IN (SELECT primary_key FROM single_table WHERE some_expr)

unique_subquery只是一个索引查找函数,它完全替换了子查询以提高效率。

index_subquery

这种连接类型类似于unique_subquery。它替换了IN子查询,但它适用于子查询中的非唯一索引:

value IN (SELECT key_column FROM single_table WHERE some_expr)

range

只检索给定范围内的行,使用索引选择行。输出行中的key列

指示使用哪个索引。key_len包含了使用的最长键部分。这种类型的ref列为NULL。

range可用于当键列与常量使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN、LIKE或IN()操作符进行比较时:

SELECT * FROM tbl_nameWHERE key_column = 10;SELECT * FROM tbl_nameWHERE key_column BETWEEN 10 and 20;SELECT * FROM tbl_nameWHERE key_column IN (10,20,30);SELECT * FROM tbl_nameWHERE key_part1 = 10 AND key_part2 IN (10,20,30);

index

index连接类型与ALL相同,只是扫描索引树。这有两种方式发生:

如果索引是查询的覆盖索引,并且可以用来满足表中所需的所有数据,则只扫描索引树。在这种情况下,Extra列显示Using index。索引只扫描通常比ALL更快,因为索引的大小通常比表数据小。

使用索引中的读取以索引顺序查找数据行执行全表扫描。Extra列中不显示Uses index。

当查询仅使用属于单个索引的列时,MySQL可以使用这种连接类型。

ALL

对于前面表的每个行组合,都进行全表扫描。如果表是第一个未标记为const的表,这通常不好,在所有其他情况下通常非常糟糕。通常,通过添加允许根据常量值或早期表的列值从表中检索行的索引,可以避免ALL。

以下是对您提供的MySQL EXPLAIN额外信息的中文翻译和解释:

EXPLAIN额外信息

EXPLAIN输出的Extra列包含有关MySQL如何解析查询的额外信息。以下列表解释了该列中可能出现的值。每个项目还指出了在JSON格式的输出中显示Extra值的属性。对于其中一些值,有一个特定的属性。其他值显示为message属性的文本。

如果您想让查询尽可能快,那么请注意Extra列的值为Using filesort和Using temporary,或者在JSON格式的EXPLAIN输出中,using_filesort和using_temporary_table属性等于true。

Backward index scan (JSON: backward_index_scan)

优化器能够使用InnoDB表上的降序索引。与Using index一起显示。

Child of ‘table’ pushed join@1 (JSON: message text)

此表被引用为可以推送到NDB内核的连接中的表的子表。仅适用于NDB Cluster,当启用推送下连接时。

const row not found (JSON属性: const_row_not_found)

对于像SELECT … FROM tbl_name这样的查询,表是空的。

Deleting all rows (JSON属性: message)

对于DELETE,一些存储引擎(如MyISAM)支持一种处理器方法,可以以简单快速的方式删除表中的所有行。如果引擎使用了这种优化,则显示此Extra值。

Distinct (JSON属性: distinct)

MySQL正在寻找不同的值,因此在找到第一个匹配行后,它会停止为当前行组合搜索更多行。

FirstMatch(tbl_name) (JSON属性: first_match)

半连接的FirstMatch连接快捷策略用于tbl_name。

Full scan on NULL key (JSON属性: message)

这发生在子查询优化中,当优化器无法使用索引查找访问方法时的后备策略。

Impossible HAVING (JSON属性: message)

HAVING子句始终为假,不能选择任何行。

Impossible WHERE (JSON属性: message)

WHERE子句始终为假,不能选择任何行。

Impossible WHERE noticed after reading const tables (JSON属性: message)

MySQL已经读取了所有const(和system)表,并注意到WHERE子句始终为假。

LooseScan(m…n) (JSON属性: message)

使用了半连接的LooseScan策略。m和n是键部分编号。

No matching min/max row (JSON属性: message)

没有行满足像SELECT MIN(…) FROM … WHERE condition这样的查询的条件。

no matching row in const table (JSON属性: message)

对于具有连接的查询,有一个空表或没有行满足唯一索引条件的表。

No matching rows after partition pruning (JSON属性: message)

对于DELETE或UPDATE,在分区修剪后,优化器没有找到要删除或更新的内容。它在含义上类似于SELECT语句的Impossible WHERE。

No tables used (JSON属性: message)

查询没有FROM子句,或者有FROM DUAL子句。

对于INSERT或REPLACE语句,当没有SELECT部分时,EXPLAIN显示此值。例如,对于EXPLAIN INSERT INTO t VALUES(10),因为它等同于EXPLAIN INSERT INTO t SELECT 10 FROM DUAL,所以会出现这个值。

Not exists (JSON属性: message)

MySQL能够对查询进行LEFT JOIN优化,一旦它找到一个匹配LEFT JOIN条件的行,它就不会在这个表中检查更多行以获取前一个行组合。下面是可以以这种方式优化的查询类型的示例:

SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.idWHERE t2.id IS NULL;

假设t2.id定义为NOT NULL。在这种情况下,MySQL扫描t1并使用t1

.id的值在t2中查找行。如果MySQL在t2中找到匹配的行,它就知道t2.id永远不可能为NULL,并且不会扫描t2中具有相同id值的其余行。换句话说,对于t1中的每一行,MySQL只需要在t2中进行一次查找,无论t2中实际匹配多少行。

在MySQL 8.0.17及更高版本中,这也可以表示WHERE条件的形式为NOT IN (子查询)或NOT EXISTS (子查询)已经内部转换为反连接。这会删除子查询并将其表带入顶层查询的计划中,提供改进的成本规划。通过合并半连接和反连接,优化器可以更自由地重新排序执行计划中的表,在某些情况下导致更快的计划。

通过在执行EXPLAIN后检查SHOW WARNINGS的Message列,或在EXPLAIN FORMAT=TREE的输出中,可以看到给定查询的反连接转换是否执行。

注意
反连接是半连接的补充table_a JOIN table_b ON condition。反连接返回table_a中的所有行,这些行在table_b中没有与condition匹配的行。

Plan isn’t ready yet (JSON属性: none)

当优化器尚未完成为正在命名连接中执行的语句创建执行计划时,会出现此值与EXPLAIN FOR CONNECTION一起出现。如果执行计划输出包含多行,则任何行或所有行都可能具有此Extra值,具体取决于优化器确定完整执行计划的进度。

Range checked for each record (index map: N) (JSON属性: message)

MySQL没有找到好的索引来使用,但发现在前面的表的列值已知后,一些索引可能会被使用。对于前面表的每个行组合,MySQL检查是否可以使用范围或index_merge访问方法来检索行。这不是非常快,但比不使用索引进行连接要快。

索引从1开始编号,按照SHOW INDEX为表显示的顺序排列。索引映射值N是一个位掩码值,表示哪些索引是候选项。例如,值0x19(二进制11001)表示考虑索引1、4和5。

Recursive (JSON属性: recursive)

这表明该行适用于递归公共表达式的递归SELECT部分。

Rematerialize (JSON属性: rematerialize)

Rematerialize (X,…)显示在表T的EXPLAIN行中,其中X是任何横向派生表,当读取T的新行时,其重新物化被触发。例如:

SELECT...
FROMt,LATERAL (引用t的派生表) AS dt
...

每次处理t的新行时,派生表的内容都会重新物化以使其保持最新。

Scanned N databases (JSON属性: message)

这表明服务器在处理INFORMATION_SCHEMA表的查询时执行了多少次目录扫描,N的值可以是0、1或全部。

Select tables optimized away (JSON属性: message)

优化器确定1)最多应返回一行,以及2)要产生这一行,必须读取确定的一组行。当要读取的行可以在优化阶段读取时(例如,通过读取索引行),在查询执行期间就不需要读取任何表。

第一个条件在查询被隐式分组时得到满足(包含聚合函数但没有GROUP BY子句)。第二个条件在每个使用的索引上执行一次行查找时得到满足。读取的索引数决定了要读取的行数。

考虑以下隐式分组的查询:

SELECT MIN(c1), MIN(c2) FROM t1;

假设MIN(c1)可以通过读取一个索引行来检索,MIN(c2)可以通过从不同索引读取一行来检索。也就是说,对于每个列c1和c2,存在一个索引,其中该列是索引的第一列。在这种情况下,返回一行,通过读取两个确定的行产生。

如果要读取的行不是确定的,则不会出现此Extra值。考虑这个查询:

SELECT MIN(c2) FROM t1 WHERE c1 <= 10;

假设(c1, c2)是覆盖索引。使用这个索引,必须扫描所有c1 <= 10的行以找到最小的c2值。相比之下,考虑这个查询:

SELECT MIN(c2) FROM t1 WHERE c1 = 10;

在这种情况下,具有c1 = 10的第一个索引行包含最小的c2值。只需读取一行即可产生返回的行。

对于按表维护精确行计数的存储引擎(如MyISAM,但不是InnoDB),如果WHERE子句缺失或始终为真,并且没有GROUP BY子句,这个Extra值可能出现在COUNT(*)查询中。(这是隐式分组查询的一个实例,其中存储引擎影响是否可以读取确定数量的行。)

Skip_open_table, Open_frm_only, Open_full_table (JSON属性: message)

这些值表示适用于INFORMATION_SCHEMA表查询的文件打开优化。

Skip_open_table:不需要打开表文件。信息已经从数据字典中获得。

Open_frm_only:只需读取数据字典中的表信息。

Open_full_table:未优化的信息查找。表信息必须从数据字典读取,并通过读取表文件获得。

Start temporary, End temporary (JSON属性: message)

这表示半连接的Duplicate Weedout策略使用了临时表。

unique row not found (JSON属性: message)

对于像SELECT … FROM tbl_name这样的查询,在表上没有行满足UNIQUE索引或PRIMARY KEY的条件。

Using filesort (JSON属性: using_filesort)

MySQL必须进行额外的传递以找出如何按排序顺序检索行。排序是通过根据连接类型遍历所有行并存储匹配WHERE子句的所有行的排序键和行指针来完成的。然后对键进行排序,按排序顺序检索行。

Using index (JSON属性: using_index)

列信息是通过仅使用索引树中的信息而不必进行额外的查找来读取实际行来检索的。当查询仅使用属于单个索引的列时,可以使用这种策略。

对于具有用户定义的聚簇索引的InnoDB表,即使在Extra列中缺少Using index,也可以使用该索引。如果type是index且key是PRIMARY,就是这种情况。

有关使用的任何覆盖索引的信息显示在EXPLAIN FORMAT=TRADITIONAL和EXPLAIN FORMAT=JSON中。从MySQL 8.0.27开始,它也显示在EXPLAIN FORMAT=TREE中。

Using index condition (JSON属性: using_index_condition)

表通过访问索引元组并首先测试它们来读取,以确定是否需要读取完整的表行。通过这种方式,索引信息被用来推迟(“下推”)读取完整的表行,除非有必要。

Using index for group-by (JSON属性: using_index_for_group_by)

类似于Using index表访问方法,Using index for group-by表示MySQL找到了一个索引,可以用来检索GROUP BY或DISTINCT查询的所有列,而不需要对实际表进行额外的磁盘访问。此外,索引以最有效的方式使用,因此对于每个组,只读取几个索引条目。

Using index for skip scan (JSON属性: using_index_for_skip_scan)

表示使用了Skip Scan访问方法。请参见Skip Scan范围访问方法。

Using join buffer (Block Nested Loop), Using join buffer (Batched Key Access), Using join buffer (hash join) (JSON属性: using_join_buffer)

早期连接的表以部分方式读入连接缓冲区,然后从缓冲区中使用它们的行与当前表执行连接。(Block Nested Loop)表示使用了Block Nested-Loop算法,(Batched Key Access)表示使用了Batched Key Access算法,(hash join)表示使用了哈希连接。也就是说,前一行的EXPLAIN输出中的表的键被缓冲,匹配的行以批次从由Using join buffer行表示的表中获取。

在JSON格式的输出中,using_join_buffer的值始终是Block Nested Loop、Batched Key Access或hash join之一。

从MySQL 8.0.18开始提供哈希连接;在MySQL 8.0.20或更高版本的MySQL发布中不使用Block Nested-Loop算法。

Using MRR (JSON属性: message)

表使用多范围读取优化策略进行读取。

Using sort_union(…), Using union(…), Using intersect(…) (JSON属性: message)

这些指示了index_merge连接类型的特定算法,显示了如何合并索引扫描。请参见第10.2.1.3节“索引合并优化”。

Using temporary (JSON属性: using_temporary_table)

为了解析查询,MySQL需要创建一个临时表来保存结果。这通常发生在查询包含GROUP BY和ORDER BY子句,并且列出的列不同。

Using where (JSON属性: attached_condition)

WHERE子句被用来限制哪些行与下一个表匹配或发送给客户端。除非您特意打算从表中获取或检查所有行,否则如果Extra值不是Using where且表的连接类型是ALL或index,则您的查询可能存在问题。

Using where在JSON格式的输出中没有直接对应物;attached_condition属性包含任何使用的WHERE条件。

Using where with pushed condition (JSON属性: message)

此项仅适用于NDB表。它意味着NDB集群正在使用条件下推优化来提高直接比较非索引列和常量的效率。在这种情况下,条件被“下推”到集群的数据节点,并在所有数据节点上同时评估。这消除了在网络上发送不匹配的行的需要,并且可以使这种查询的速度比不使用条件下推的情况快5到10倍。

Zero limit (JSON属性: message)

查询有一个LIMIT 0子句,不能选择任何行。

参考链接

  • MySQL 8.0 Reference Manual - EXPLAIN Output Format

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

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

相关文章

为什么不推荐使用外键

定义外键之后&#xff0c;数据库的每次操作都需要去检查外键约束。对于插入来说&#xff0c;影响了插入速度&#xff1b;对于更新来说&#xff0c;级联更新是强阻塞&#xff0c;存在数据库更新风暴&#xff08;Database Update Storm&#xff09;的风险。 所谓 Database Updat…

2024健康服务展/营养健康展/山东功能性食品展会/大健康展

6大展馆&#xff0c;1200家参展商&#xff0c;20000款展品&#xff0c;100000买家&#xff0c;打造2024年度大健康行业价值盛会&#xff1b; 2024第6届中国&#xff08;济南&#xff09;国际大健康产业博览会&#xff08;China-DJK山东健博会&#xff09; The 2024 sixth Chin…

window vscode安装node.js

window vscode安装node.js 官网下好vscode 和nodejs 点这个安装 等待安装完毕 在VScode运行 npm -v node -v 显示版本号则成功

【剑指offer】70--矩形覆盖[C++]

目录 1. 题目描述 2. 解题思路 3.【C解法】 4. 输出结果 1. 题目描述 我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形&#xff0c;总共有多少种方法&#xff1f;注意&#xff1a;约定 n 0 时&#xff0c;输…

StarCoder 2:GitHub Copilot本地开源LLM替代方案

GitHub CoPilot拥有超过130万付费用户&#xff0c;部署在5万多个组织中&#xff0c;是世界上部署最广泛的人工智能开发工具。使用LLM进行编程辅助工作不仅提高了生产力&#xff0c;而且正在永久性地改变数字原住民开发软件的方式&#xff0c;我也是它的付费用户之一。 低代码/…

JVM-对象创建与内存分配机制深度剖析 3

JVM对象创建过程详解 类加载检查 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个 符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那必须先执行相应的类加载过程。 new…

【小黑送书—第十一期】>>如何阅读“计算机界三大神书”之一 ——SICP(文末送书)

《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动全世界大学计算机科学技术教育的发展和成熟产生了很大影响。…

园区内网配置——华为

部署思路 表1 设备登录安全策略部署 部署建议 功能描述 应用场景 配置本地Console口登录的安全功能 配置Console口用户界面的认证方式和用户级别等。 本地Console口登录设备时建议配置此功能&#xff0c;提升本地设备登录的安全性。 配置远程STelnet登录的安全功能 配置…

2024年AI辅助研发:科技新贵,工业变革的先锋

2024年AI辅助研发&#xff1a;科技新贵&#xff0c;工业变革的先锋 随着人工智能&#xff08;AI&#xff09;技术的持续发展与突破&#xff0c;我们站在了一个令人振奋的时代门槛上。2024年&#xff0c;AI辅助研发正迅速成为科技界和工业界共同瞩目的焦点。从实验室的微观世界…

nginx 的 location 模块

目录 一、匹配规则 1.基础匹配 2.精确匹配 3.前缀匹配 4.正则表达式匹配 二、优先级顺序 三、示例 1.精确匹配 2.前缀匹配 3.正则匹配 4.默认匹配 第一种情况&#xff1a;proxy_pass最后面没有斜杠,匹配路径有斜杠(/bbb/) 第二种情况&#xff1a; proxy_pass最后面…

日常开发Git命令

场景&#xff1a; 在远程库创建分支后&#xff0c;在本地开发后-合并代码-push到远程库 命令行 #查看现在分支 git branch #切换到master分支 git checkout master #拉取远程库修改 git pull git branch #切换到修改的分支 git checkout feature/s3-use-internel-name #merg…

c1-第三周

文章目录 1月份2.定义一个整形数组arr2.定义整形栈s3.输入一个字符串包括大小写和数字&#xff0c;将其中的大写英文字母改为小写&#xff0c;并且输出数字个数4.根据下面数据&#xff0c;编程实现要求功能&#xff1a; 9月1.编写程序实现以下功能或问题3.完成以下功能4.对运算…

数据结构之单链表详解(C语言手撕)

​ &#x1f389;个人名片&#xff1a;&#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN…

移动执法远程视频监控方案:视频监控系统EasyCVR+4G/5G移动执法仪

一、背景需求 在现代城市管理中&#xff0c;移动执法仪视频监控方案正逐渐成为一种高效、便捷的管理工具。该方案通过结合移动执法仪和视频监控技术&#xff0c;实现了对城市管理现场的实时监控和取证&#xff0c;有效提升了城市管理水平和效率。 移动执法仪作为现场执法的重…

深入浅出(二)MVVM

MVVM 1. 简介2. 示例 1. 简介 2. 示例 示例下载地址&#xff1a;https://download.csdn.net/download/qq_43572400/88925141 创建C# WPF应用(.NET Framework)工程&#xff0c;WpfApp1 添加程序集 GalaSoft.MvvmLight 创建ViewModel文件夹&#xff0c;并创建MainWindowV…

探索免安装的轻量级数据库:SQLite、SQL Server Compact

在应用程序开发中&#xff0c;有时候我们不需要复杂的数据库系统&#xff0c;而只需要一个轻量级的解决方案来存储和管理数据。本文将向您介绍三种免安装的轻量级数据库&#xff1a;SQLite和SQL Server Compact&#xff0c;并提供它们的特性、使用方式和实际应用场景。 1、SQL…

S3---FPGA-A7板级电源硬件实战

视频链接 FPGA-A7板级电源硬件实战01_哔哩哔哩_bilibili FPGA-A7板级电源硬件实战 1、基于A7 板级的系统框图 2、基于A7 板级的电源设计细则 2.1、A7 FPGA功耗评估 Artix-7 FPGA电源有VCCINT, VCCBRAM, VCCAUX, VCCO, VMGTAVCC和VMGTAVTT。 2.1.1、A7 FPGA电源管脚 2.1.2…

vue2的element UI 表格单选

代码 this.$refs.multipleTable.toggleRowSelection(selection.shift(), false);multipleTable 是定义的表格的ref

Qt添加VTK并绘制图形

文章目录 准备环境使用VS创建Qt Widget项目配置VTK依赖调试C/C链接器 添加vtk窗口测试代码 参考链接&#xff1a; VS2017配置QT环境(详细版)_vs2017 qt-CSDN博客 QT5VTK9.1最新配置方法_qt vtk-CSDN博客 VTK笔记-Qt5.12.11编译VTK9.0.3-QVTKOpenGLNativeWidget-CSDN博客 准…

【C++】设计模式:观察者、策略、模板

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍设计模式&#xff1a;观察者、策略、模板。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xf…