<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=MySQL_%E4%BC%98%E5%8C%96%EF%BC%9A%E4%BC%98%E5%8C%96_SQL_%E8%AF%AD%E5%8F%A5%EF%BC%9A%E4%BC%98%E5%8C%96_INFORMATION_SCHEMA_%E6%9F%A5%E8%AF%A2</id>
	<title>MySQL 优化：优化 SQL 语句：优化 INFORMATION SCHEMA 查询 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=MySQL_%E4%BC%98%E5%8C%96%EF%BC%9A%E4%BC%98%E5%8C%96_SQL_%E8%AF%AD%E5%8F%A5%EF%BC%9A%E4%BC%98%E5%8C%96_INFORMATION_SCHEMA_%E6%9F%A5%E8%AF%A2"/>
	<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=MySQL_%E4%BC%98%E5%8C%96%EF%BC%9A%E4%BC%98%E5%8C%96_SQL_%E8%AF%AD%E5%8F%A5%EF%BC%9A%E4%BC%98%E5%8C%96_INFORMATION_SCHEMA_%E6%9F%A5%E8%AF%A2&amp;action=history"/>
	<updated>2026-04-25T03:53:55Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=MySQL_%E4%BC%98%E5%8C%96%EF%BC%9A%E4%BC%98%E5%8C%96_SQL_%E8%AF%AD%E5%8F%A5%EF%BC%9A%E4%BC%98%E5%8C%96_INFORMATION_SCHEMA_%E6%9F%A5%E8%AF%A2&amp;diff=6557&amp;oldid=prev</id>
		<title>2023年3月31日 (五) 15:17 Eijux</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=MySQL_%E4%BC%98%E5%8C%96%EF%BC%9A%E4%BC%98%E5%8C%96_SQL_%E8%AF%AD%E5%8F%A5%EF%BC%9A%E4%BC%98%E5%8C%96_INFORMATION_SCHEMA_%E6%9F%A5%E8%AF%A2&amp;diff=6557&amp;oldid=prev"/>
		<updated>2023-03-31T15:17:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年3月31日 (五) 23:17的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;第1行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第1行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;MySQL&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;MySQL文档&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 关于 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 关于 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=MySQL_%E4%BC%98%E5%8C%96%EF%BC%9A%E4%BC%98%E5%8C%96_SQL_%E8%AF%AD%E5%8F%A5%EF%BC%9A%E4%BC%98%E5%8C%96_INFORMATION_SCHEMA_%E6%9F%A5%E8%AF%A2&amp;diff=2702&amp;oldid=prev</id>
		<title>Eijux：​建立内容为“category:MySQL  == 关于 == 监视数据库的应用程序可能会频繁使用 INFORMATION_SCHEMA 表。可以对 INFORMATION_SCHEMA 表的某些类型的…”的新页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=MySQL_%E4%BC%98%E5%8C%96%EF%BC%9A%E4%BC%98%E5%8C%96_SQL_%E8%AF%AD%E5%8F%A5%EF%BC%9A%E4%BC%98%E5%8C%96_INFORMATION_SCHEMA_%E6%9F%A5%E8%AF%A2&amp;diff=2702&amp;oldid=prev"/>
		<updated>2021-04-26T02:30:02Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“&lt;a href=&quot;/%E5%88%86%E7%B1%BB:MySQL&quot; title=&quot;分类:MySQL&quot;&gt;category:MySQL&lt;/a&gt;  == 关于 == 监视数据库的应用程序可能会频繁使用 INFORMATION_SCHEMA 表。可以对 INFORMATION_SCHEMA 表的某些类型的…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[category:MySQL]]&lt;br /&gt;
&lt;br /&gt;
== 关于 ==&lt;br /&gt;
监视数据库的应用程序可能会频繁使用 INFORMATION_SCHEMA 表。可以对 INFORMATION_SCHEMA 表的某些类型的查询进行优化以更快地执行。目标是最大程度地减少文件操作（例如，扫描目录或打开表文件）以收集构成这些动态表的信息。&lt;br /&gt;
* INFORMATION_SCHEMA 查询中数据库名称和表名称的比较行为可能与您期望的不同。&lt;br /&gt;
&lt;br /&gt;
== 尝试对WHERE子句中的数据库和表名使用常量查找值 ==&lt;br /&gt;
可以利用以下原理：&lt;br /&gt;
# 要查找数据库或表，请使用计算结果为常量的表达式，例如 Literals 值，返回常量的函数或标量子查询。&lt;br /&gt;
# 避免使用非恒定数据库名称查找值（或不使用查找值）的查询，因为它们需要扫描数据目录才能找到匹配的数据库目录名称。【？】&lt;br /&gt;
# 在数据库内，请避免使用“非恒定表名”查找值（或不使用查找值）的查询，因为它们需要扫描数据库目录以查找匹配的表文件。【？】&lt;br /&gt;
&lt;br /&gt;
此原理适用于下表中显示的 INFORMATION_SCHEMA 表，该表显示了其常量查找值使服务器能够避免目录扫描的列：&lt;br /&gt;
: 例如，如果要从 TABLES 选择，则在 WHERE 子句中为 TABLE_SCHEMA 使用恒定的查找值可以避免进行数据目录扫描。&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Table !! 指定要避免数据目录扫描的列 !! 指定要避免数据库目录扫描的列 &lt;br /&gt;
|-&lt;br /&gt;
| COLUMNS || TABLE_SCHEMA || TABLE_NAME&lt;br /&gt;
|-&lt;br /&gt;
| KEY_COLUMN_USAGE || TABLE_SCHEMA || TABLE_NAME&lt;br /&gt;
|-&lt;br /&gt;
| PARTITIONS || TABLE_SCHEMA || TABLE_NAME&lt;br /&gt;
|-&lt;br /&gt;
| REFERENTIAL_CONSTRAINTS || CONSTRAINT_SCHEMA || TABLE_NAME&lt;br /&gt;
|-&lt;br /&gt;
| STATISTICS || TABLE_SCHEMA || TABLE_NAME&lt;br /&gt;
|-&lt;br /&gt;
| TABLES || TABLE_SCHEMA || TABLE_NAME&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_CONSTRAINTS || TABLE_SCHEMA || TABLE_NAME&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGERS || EVENT_OBJECT_SCHEMA || EVENT_OBJECT_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| VIEWS || TABLE_SCHEMA || TABLE_NAME&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
限于特定的常量数据库名称的查询的好处是只需要对命名数据库目录进行检查。例：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES&lt;br /&gt;
WHERE TABLE_SCHEMA = 'test';&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
使用 Literals 数据库名称test可使服务器仅检查test数据库目录，而不管可能有多少个数据库。相比之下，以下查询效率较低，因为它需要扫描数据目录以确定哪些数据库名称与'test%'模式匹配：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES&lt;br /&gt;
WHERE TABLE_SCHEMA LIKE 'test%';&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
对于限于特定常量表名称的查询，仅需要检查相应数据库目录中的命名表。例：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES&lt;br /&gt;
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1';&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
使用 Literals 表名t1可使服务器仅检查t1表的文件，而不管test数据库中可能有多少个表。相比之下，以下查询需要扫描test数据库目录以确定哪些表名称与模式't%'匹配：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES&lt;br /&gt;
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME LIKE 't%';&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
以下查询需要扫描数据库目录以确定模式'test%'的匹配数据库名称，并且对于每个匹配的数据库，都需要扫描数据库目录以确定模式't%'的匹配表名称：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES&lt;br /&gt;
WHERE TABLE_SCHEMA = 'test%' AND TABLE_NAME LIKE 't%';&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 编写查询以最小化必须打开的表文件的数量【？】 ===&lt;br /&gt;
对于引用某些 INFORMATION_SCHEMA 表列的查询，可以使用几种优化来最大程度地减少必须打开的表文件的数量。例：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLES&lt;br /&gt;
WHERE TABLE_SCHEMA = 'test';&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
在这种情况下，服务器扫描数据库目录以确定数据库中表的名称之后，这些名称将可用，而无需进行进一步的文件系统查找。因此，TABLE_NAME 不需要打开任何文件。可以通过打开表的'''.frm'''文件而不接触'''.MYD'''或'''.MYI'''文件等其他表文件来确定 ENGINE（存储引擎）的值。&lt;br /&gt;
* 某些值（例如 MyISAM 表的INDEX_LENGTH）也需要打开.MYD或.MYI文件。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
文件打开优化类型表示为：&lt;br /&gt;
* SKIP_OPEN_TABLE：不需要打开表文件。通过扫描数据库目录，该信息已在查询中可用。&lt;br /&gt;
* OPEN_FRM_ONLY：仅需要打开表的.frm文件。&lt;br /&gt;
* OPEN_TRIGGER_ONLY：仅需要打开表的.TRG文件。&lt;br /&gt;
* OPEN_FULL_TABLE：未优化的信息查找。必须打开.frm，.MYD和.MYI文件。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以下列表指示了前面的优化类型如何应用于 INFORMATION_SCHEMA 表列。对于未命名的表和列，没有任何优化适用。&lt;br /&gt;
* COLUMNS：OPEN_FRM_ONLY适用于所有列&lt;br /&gt;
* KEY_COLUMN_USAGE：OPEN_FULL_TABLE适用于所有列&lt;br /&gt;
* PARTITIONS：OPEN_FULL_TABLE适用于所有列&lt;br /&gt;
* REFERENTIAL_CONSTRAINTS：OPEN_FULL_TABLE适用于所有列&lt;br /&gt;
* STATISTICS：&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column !! Optimization type&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_CATALOG || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_SCHEMA || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_NAME || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| NON_UNIQUE || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| INDEX_SCHEMA || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| INDEX_NAME || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| SEQ_IN_INDEX || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| COLUMN_NAME || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| COLLATION || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| CARDINALITY || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| SUB_PART || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| PACKED || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| NULLABLE || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| INDEX_TYPE || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| COMMENT || OPEN_FRM_ONLY&lt;br /&gt;
|}&lt;br /&gt;
* TABLES：&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column !! Optimization type&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_CATALOG || SKIP_OPEN_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_SCHEMA || SKIP_OPEN_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_NAME || SKIP_OPEN_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_TYPE || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| ENGINE || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| VERSION || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| ROW_FORMAT || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_ROWS || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| AVG_ROW_LENGTH || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| DATA_LENGTH || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| MAX_DATA_LENGTH || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| INDEX_LENGTH || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| DATA_FREE || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| AUTO_INCREMENT || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| CREATE_TIME || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| UPDATE_TIME || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| CHECK_TIME || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_COLLATION || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| CHECKSUM || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| CREATE_OPTIONS || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_COMMENT || OPEN_FRM_ONLY&lt;br /&gt;
|}&lt;br /&gt;
* TABLE_CONSTRAINTS：OPEN_FULL_TABLE适用于所有列&lt;br /&gt;
* TRIGGERS：OPEN_TRIGGER_ONLY适用于所有列&lt;br /&gt;
* VIEWS：&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column !! Optimization type&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_CATALOG || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_SCHEMA || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| TABLE_NAME || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| VIEW_DEFINITION || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| CHECK_OPTION || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| IS_UPDATABLE || OPEN_FULL_TABLE&lt;br /&gt;
|-&lt;br /&gt;
| DEFINER || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| SECURITY_TYPE || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| CHARACTER_SET_CLIENT || OPEN_FRM_ONLY&lt;br /&gt;
|-&lt;br /&gt;
| COLLATION_CONNECTION || OPEN_FRM_ONLY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 使用'''EXPLAIN'''确定服务器是否可以对查询使用INFORMATION_SCHEMA优化【？】 ===&lt;br /&gt;
这尤其适用于从多个数据库中搜索信息的 INFORMATION_SCHEMA 查询，这可能会花费很长时间并影响性能。 EXPLAIN 输出中的“Extra”值指示服务器可以使用哪些较早描述的优化来评估 INFORMATION_SCHEMA 查询。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以下示例演示了您希望在Extra值中看到的各种信息：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot; highlight=&amp;quot;4,8,10-13&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; EXPLAIN SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE&lt;br /&gt;
       TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v1'\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
           id: 1&lt;br /&gt;
  select_type: SIMPLE&lt;br /&gt;
        table: VIEWS&lt;br /&gt;
         type: ALL&lt;br /&gt;
possible_keys: NULL&lt;br /&gt;
          key: TABLE_SCHEMA,TABLE_NAME&lt;br /&gt;
      key_len: NULL&lt;br /&gt;
          ref: NULL&lt;br /&gt;
         rows: NULL&lt;br /&gt;
        Extra: Using where; Open_frm_only; Scanned 0 databases&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
使用常量数据库和表查找值可使服务器避免目录扫描。对于 VIEWS.TABLE_NAME 的引用，仅需要打开 .frm 文件。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot; highlight=&amp;quot;4,8-12&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; EXPLAIN SELECT TABLE_NAME, ROW_FORMAT FROM INFORMATION_SCHEMA.TABLES\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
           id: 1&lt;br /&gt;
  select_type: SIMPLE&lt;br /&gt;
        table: TABLES&lt;br /&gt;
         type: ALL&lt;br /&gt;
possible_keys: NULL&lt;br /&gt;
          key: NULL&lt;br /&gt;
      key_len: NULL&lt;br /&gt;
          ref: NULL&lt;br /&gt;
         rows: NULL&lt;br /&gt;
        Extra: Open_full_table; Scanned all databases&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
没有提供查找值（没有WHERE子句），因此服务器必须扫描数据目录和每个数据库目录。对于这样标识的每个表，选择表名和行格式。 TABLE_NAME 不需要再打开任何表文件（使用SKIP_OPEN_TABLE优化）。 ROW_FORMAT 要求打开所有表文件（OPEN_FULL_TABLE适用）。 EXPLAIN 报告 OPEN_FULL_TABLE，因为它比 SKIP_OPEN_TABLE 贵。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot; highlight=&amp;quot;4,8,10-12&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; EXPLAIN SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES&lt;br /&gt;
       WHERE TABLE_SCHEMA = 'test'\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
           id: 1&lt;br /&gt;
  select_type: SIMPLE&lt;br /&gt;
        table: TABLES&lt;br /&gt;
         type: ALL&lt;br /&gt;
possible_keys: NULL&lt;br /&gt;
          key: TABLE_SCHEMA&lt;br /&gt;
      key_len: NULL&lt;br /&gt;
          ref: NULL&lt;br /&gt;
         rows: NULL&lt;br /&gt;
        Extra: Using where; Open_frm_only; Scanned 1 database&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
没有提供表名查找值，因此服务器必须扫描test数据库目录。对于 TABLE_NAME 和 TABLE_TYPE 列，分别应用 SKIP_OPEN_TABLE 和 OPEN_FRM_ONLY 优化。 EXPLAIN 报告 OPEN_FRM_ONLY，因为它更贵。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; EXPLAIN SELECT B.TABLE_NAME&lt;br /&gt;
       FROM INFORMATION_SCHEMA.TABLES AS A, INFORMATION_SCHEMA.COLUMNS AS B&lt;br /&gt;
       WHERE A.TABLE_SCHEMA = 'test'&lt;br /&gt;
       AND A.TABLE_NAME = 't1'&lt;br /&gt;
       AND B.TABLE_NAME = A.TABLE_NAME\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
           id: 1&lt;br /&gt;
  select_type: SIMPLE&lt;br /&gt;
        table: A&lt;br /&gt;
         type: ALL&lt;br /&gt;
possible_keys: NULL&lt;br /&gt;
          key: TABLE_SCHEMA,TABLE_NAME&lt;br /&gt;
      key_len: NULL&lt;br /&gt;
          ref: NULL&lt;br /&gt;
         rows: NULL&lt;br /&gt;
        Extra: Using where; Skip_open_table; Scanned 0 databases&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
           id: 1&lt;br /&gt;
  select_type: SIMPLE&lt;br /&gt;
        table: B&lt;br /&gt;
         type: ALL&lt;br /&gt;
possible_keys: NULL&lt;br /&gt;
          key: NULL&lt;br /&gt;
      key_len: NULL&lt;br /&gt;
          ref: NULL&lt;br /&gt;
         rows: NULL&lt;br /&gt;
        Extra: Using where; Open_frm_only; Scanned all databases;&lt;br /&gt;
               Using join buffer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
对于第一个 EXPLAIN 输出行：常量数据库和表查找值使服务器可以避免对TABLES值进行目录扫描。引用 TABLES.TABLE_NAME 不需要其他表文件。&lt;br /&gt;
&lt;br /&gt;
对于第二个 EXPLAIN 输出行：所有 COLUMNS 表的值都是 OPEN_FRM_ONLY 查找，因此 COLUMNS.TABLE_NAME 需要打开.frm文件。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
mysql&amp;gt; EXPLAIN SELECT * FROM INFORMATION_SCHEMA.COLLATIONS\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
           id: 1&lt;br /&gt;
  select_type: SIMPLE&lt;br /&gt;
        table: COLLATIONS&lt;br /&gt;
         type: ALL&lt;br /&gt;
possible_keys: NULL&lt;br /&gt;
          key: NULL&lt;br /&gt;
      key_len: NULL&lt;br /&gt;
          ref: NULL&lt;br /&gt;
         rows: NULL&lt;br /&gt;
        Extra:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
在这种情况下，由于 COLLATIONS 不是可进行优化的 INFORMATION_SCHEMA 表之一，因此不应用优化。&lt;/div&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
</feed>