EXPLAIN是查看MySQL优化器如何决定执行查询的主要方法,这个功能具有局限性,以为它并总是会说出真相,但是却可以获得最好信息.
学会解释EXPLAIN,你就会了解MySQL优化器是如何工作,你才能去优化MySQL.
如何调用?
只需要在SELECT前面加上EXPLAIN即可.
在语句结尾(;之前)加上\G能够更清晰的查看.
需要说的是EXPLAIN只对SELECT查询作解释,INSERT,UPDATE,DELETE不会哦.
EXPLAIN中的列
id列一个标识SELECT所属行编号,如果在语句中没有子查询或联合,说明只有一个SELECT,于是这个列显示为1,否则内层的SELECT会顺序编号.
MySQL将SELECT查询分为简单和复杂类型,复杂类型可分为:简单子查询,所谓的派生表(在FROM子句中的子查询),UNION查询.
简单子查询:EXPLAIN SELECT (SELECT `uid` FROM `tips` limit 1) FROM `test_key` WHERE 1
所谓的派生表(在FROM子句中的子查询)EXPLAIN SELECT uid FROM (SELECT uid FROM user) as der.
select_type列:显示了对应还是简单还是复杂SELECT(如果是后者,则将会是三种复杂类型中的一种).
SIMPLE意味着查询中不包含子查询和UNION.如果查询中包含子查询或UNION,那么最外层的SELECT被标记为PRIMARY(也就是id列为1的)
其他标记:
SUBQUERY,包含在SELECT列表中的子查询(不在FROM子句中)被标记为此;
DERIVED,在FROM子句中的子查询被标记为此;
UNION,在UNION中的第二个和随后的SELECT被标记为此;如EXPLAIN SELECT 1 UNION ALL SELECT 1
UNION RESULT,用来从UNION的临时表检索结果的SELECT标记为UNION RESULT,如EXPLAIN SELECT 1 UNION ALL SELECT 1
table列:显示对应行正在访问哪个表
当FROM子句中有子查询或UNION时,table列是
type列:就是MySQL决定如何查找表中行(一下从最差到最优排列)
ALL,全表扫描
index,跟全表扫描一样,知识MySQL在扫描表时按索引次序进行而不是行range,范围扫描,一个有限制的索引扫描,它开始于索引里的某一点,返回匹配这个值域的行(显而易见的范围扫描.即带有BETWEEN或在WHERE子句中带有>的查询,当MySQL使用索引去查找一系列值的时候,如IN()和OR列表,也为显示的范围扫描)
ref,一种索引访问也叫索引查找,他返回所有匹配某单个值的行,它可能会找到多个符合条件行(EXPLAIN SELECT tipname FROM `tips` WHERE uid=10984)
eq_ref,一种索引查找,他最多只返回一条符合条件的行.这种会在使用主键或者唯一性索引时看到.(EXPLAIN SELECT * FROM `tips` WHERE uid=12)
const和system,当MySQL能对查询的某部分进行优化并将其转换成一个常量时(EXPLAIN SELECT * FROM `tips` WHERE id=5)
NULL,这种访问方式意味着MySQL能在优化阶段分解查询语句,在执行阶段用不着在访问表或者索引(EXPLAIN SELECT max(id),min(id)FROM `tips`)
possible_keys列:这一列显示了查询可以使用哪些索引,是基于查询访问的列和使用的比较操作符来判断的.
key列:这一列显示了MySQL决定采用哪个索引来优化对该表的访问
key_len列:显示MySQL在索引里使用的字节数.举个例子就是在查询中使用到了主键,而主键的数据类型为INT,则为4,SMALLINT则为2
ref列:显示了之前的表在key列记录的索引中查询值所用到的列或常量.
row列:显示的是MySQL为了找到所需的值而要读取的行数.
Extra列:在此显示的是在其他列不适合显示的额外信息
Using index,MySQL将使用覆盖索引,以避免访问表(就是仅仅使用了索引中信息而没有读取表中)
Using where,意味着MySQL服务器将在存储引擎检索行后在进行过滤(将会通过WHERE条件来筛选存储引擎返回的记录)
Using temporary,意味着MySQL在对查询结果排序时会用到一个临时表.
Using filesort,意味着MySQL会对结果使用一个外部索引排序,而不是按索引次序从表里读出来.
Rangechecked for each record(indexmap:N),意味着没有好用的索引,新的索引将在联接的每一行上重新估算,N代表possible_keys列中索引的位图,并且是冗余的。

この記事では、DockerのMySQLメモリ使用量を最適化することを調査します。 監視手法(Docker統計、パフォーマンススキーマ、外部ツール)および構成戦略について説明します。 これらには、Dockerメモリの制限、スワッピング、およびcgroupsが含まれます

この記事では、MySQLの「共有ライブラリを開くことができない」エラーについて説明します。 この問題は、必要な共有ライブラリ(.so/.dllファイル)を見つけることができないMySQLの障害に起因しています。ソリューションには、システムのパッケージMを介してライブラリのインストールを確認することが含まれます。

この記事では、MySQLのAlter Tableステートメントを使用して、列の追加/ドロップ、テーブル/列の名前の変更、列データ型の変更など、テーブルを変更することについて説明します。

この記事では、PHPMyAdminの有無にかかわらず、LinuxにMySQLを直接インストールするのとPodmanコンテナを使用します。 それは、各方法のインストール手順を詳述し、孤立、携帯性、再現性におけるポッドマンの利点を強調しますが、

この記事では、自己完結型のサーバーレスリレーショナルデータベースであるSQLiteの包括的な概要を説明します。 SQLiteの利点(シンプルさ、移植性、使いやすさ)と短所(同時性の制限、スケーラビリティの課題)を詳しく説明しています。 c

このガイドは、HomeBrewを使用してMacOSに複数のMySQLバージョンをインストールおよび管理することを示しています。 Homebrewを使用して設置を分離し、紛争を防ぐことを強調しています。 この記事では、インストール、開始/停止サービス、および最高のPRAを詳述しています

記事では、証明書の生成と検証を含むMySQL用のSSL/TLS暗号化の構成について説明します。主な問題は、セルフ署名証明書のセキュリティへの影響を使用することです。[文字カウント:159]

記事では、MySQLワークベンチやPHPMyAdminなどの人気のあるMySQL GUIツールについて説明し、初心者と上級ユーザーの機能と適合性を比較します。[159文字]


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!
