> mysql查询优化,请说明:深度潜水
执行MySQL查询时,查询优化器会制定执行计划。 要检查此计划,请使用EXPLAIN
>命令。 EXPLAIN
对于理解和优化慢速查询是无价的,但是许多开发人员将其不足。本文探讨了EXPLAIN
的输出及其在模式和查询优化中的应用。
钥匙要点:
EXPLAIN
EXPLAIN
,type
,possible_keys
,key
,rows
,Extra
),以了解查询处理并识别用于改进的区域。JOIN
>或WHERE
>条款中的列中策略性地添加索引,以大大降低行扫描,提高速度并最小化加载时间。
EXPLAIN EXTENDED
>用于查询转换和执行的详细见解,尤其是对于复杂的优化任务。
SHOW WARNINGS
>定期使用EXPLAIN
EXPLAIN
>只需将您的>带有
SELECT
EXPLAIN
样品输出可能看起来像这样:
<code class="language-sql">EXPLAIN SELECT * FROM categoriesG;</code>
这个看似简洁的输出丰富的信息。 关键列是:
id
:在查询中的每个SELECT
>的顺序标识符(与嵌套子量相关)。select_type
:SELECT
>查询的类型(简单,主,派生,子查询等)。 SIMPLE
指示无子征询或table
type
,system
,const
)到低效率(eq_ref
,指示全表扫描)。
ALL
possible_keys
>
NULL
key
possible_keys
key_len
ref
>
key
rows
>
JOIN
Extra
来查看优化器执行的查询转换:EXPLAIN EXTENDED
SHOW WARNINGS
<code class="language-sql">EXPLAIN SELECT * FROM categoriesG;</code>
进行故障排除的性能
EXPLAIN
>让我们说明优化性能较差的查询。 考虑缺乏索引的电子商务数据库(GITHUB上可用)。书写不好的查询看起来像这样:>
<code>********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)</code>>
和EXPLAIN
,并且非常高的NULL
>值,指示每个表进行全表扫描。这是极低效率的。possible_keys
key
>添加主键和索引(例如,在rows
条款中使用的列上)大大提高了性能。在添加索引后重新启动
值和更有效的联接类型(“ const,”“ eq_ref”)。
JOIN
另一个示例涉及两个表格的EXPLAIN
,每个表都与rows
>:
UNION
没有适当的索引,productlines
将显示完整的表扫描。 添加索引并在策略上放置
<code class="language-sql">EXPLAIN EXTENDED SELECT City.Name FROM City JOIN Country ON (City.CountryCode = Country.Code) WHERE City.CountryCode = 'IND' AND Country.Continent = 'Asia'; SHOW WARNINGS;</code>>子征服中可以大大减少扫描的行数。
EXPLAIN
WHERE
摘要UNION
是维护数据库健康的关键,尤其是在动态应用中。
以上是使用解释来编写更好的mysql查询的详细内容。更多信息请关注PHP中文网其他相关文章!