RDS MySQLの8.0 SQLの概要機能

背景

本番環境では、MySQLデータベース・インスタンスのプロセスは、以下のようないくつかの要因とシナリオが存在する一方で、ここで、データベースの安定性のリスクの増加につながる、計画変更が発生したSQL文の実行の一部を実行している:テーブルデータの量の変化であり、自動的に統計情報を収集し、CBOのオプティマイザは、低コストの計画を計算し、またはいくつかのインデックスのテーブル構造の変更、追加、削除、または移動のインスタンスをアップグレードする過程で、MySQLの自分の行動と最適化の場合このアルゴリズムは、ように変更されました。オンライン事業計画と介入のSQL文の実装に対応することができるようにするために、AliSQLは、計画の実施を安定させるために、MySQLのオプティマイザ/インデックスヒントを使用する方法を考案した文の概要と呼ばれ、容易な管理インターフェイス(DBMS_OUTLNパッケージ)のセットを提供し、そしてRDS MySQLの8.0製品で公開。


概要デザイン

2つのカテゴリに分かれ、すべて公式にサポートされているヒントの種類、用AliSQL 8.0アウトラインのMySQL 8.0のサポート:

  • オプティマイザ・ヒント

スコープ(クエリ・ブロック)とヒントオブジェクトは、分割されます。レベル無料のヒントに参加、テーブル/インデックスレベルヒント、
注文のようなヒント参加。


詳細参照:https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html

  • インデックスのヒント

メインインデックスヒント(USE、FORCE、IGNORE)およびスコープ(FOR ORDER BYのために、結合の種類に応じて 、
GROUP BYの分類)。


詳細な構文参照:https://dev.mysql.com/doc/refman/8.0/en/index-hints.html

これらの抽象とヒントを表現するために、アウトラインを持続することができ、AliSQL 8.0は、システム・テーブル・mysql.outline、以下の構造を追加します。

MYSQL.OUTLINE

CREATE TABLE `mysql`.`outline` (
  `Id` bigint(20) NOT NULL AUTO_INCREMENT,
  `Schema_name` varchar(64) COLLATE utf8_bin DEFAULT NULL,
  `Digest` varchar(64) COLLATE utf8_bin NOT NULL,
  `Digest_text` longtext COLLATE utf8_bin,
  `Type` enum('IGNORE INDEX','USE INDEX','FORCE INDEX','OPTIMIZER') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `Scope` enum('','FOR JOIN','FOR ORDER BY','FOR GROUP BY') CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '',
  `State` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Y',
  `Position` bigint(20) NOT NULL,
  `Hint` text COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`Id`)
) /*!50100 TABLESPACE `mysql` */ ENGINE=InnoDB
DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0 COMMENT='Statement outline'

コラム

ダイジェスト/ Digest_text


機能のステートメントと一致概要、この機能はダイジェストテキスト、このダイジェストテキスト取得に応じてハッシュ計算である
64バイトのハッシュ文字列が。例えば:

Statement query:  select * from t1 where id = 1

根据计算得到的Digest 和 Digest text 分别是:

Digest :          36bebc61fce7e32b93926aec3fdd790dad5d895107e2d8d3848d1c60b74bcde6

Digest_text:    SELECT * FROM `t1` WHERE `id` = ?        


声明は、クエリの概要をマッチング、ハッシュキーとして[スキーマ+ダイジェスト]に基づいて、完全に解析された場合。

タイプ

タイプOPTIMIZERの団結のためのすべてのオプティマイザヒント


つまり三つのカテゴリーに分かれてインデックスヒント:

- USE INDEX
- FORCE INDEX
- IGNORE INDEX

 範囲

 唯一のインデックスヒントのスコープは、それが4つのカテゴリに分かれています。

- FOR GROUP BY
- FOR ORDER BY
- FOR JOIN

 ALL空の文字列の場合

ポジション


位置は非常に重要です:


オプティマイザヒントでは、すべてのオプティマイザ・ヒントはクエリブロックに適用されなければならないので、位置は、クエリのブロックを表し、
オプティマイザヒントがキーワードだけのこれらのタイプをサポートしているため、決意は比較的簡単です:

SELECT /*+ ... */ ...
INSERT /*+ ... */ ...
REPLACE /*+ ... */ ...
UPDATE /*+ ... */ ...
DELETE /*+ ... */ ...

だから、最初から位置は、最初のいくつかのキーワードをアンカー文のヒントの役割は、いくつかあります。

インデックスヒントに、位置がテーブルの位置を表し、また初めから、最初のいくつかのテーブルのアンカーでヒント役割は、いくつかあります。

ヒント


インデックスヒントでは、ここに示す指数は、「IND_1、ind_2」などの名前のリスト、である
「/:ここに示されオプティマイザヒントでは、のような、完全なヒント文字列されて+ max_execution_timeに(1000) /」

ユーザーインターフェース

管理ステートメントアウトライン、管理するように設計AliSQL DBMS_OUTLNパッケージを容易にするために、そして5つのネイティブの手続きのインタフェースを提供しています:

DBMS_OUTLN.add_index_outline();                     增加 index hint
DBMS_OUTLN.add_optimizer_outline();                增加 optimizer hint
DBMS_OUTLN.preview_outline();                            预览某一个 SQL 语句命中 outline 的情况
DBMS_OUTLN.show_outline();                                展示内存中可用的所有 outline 及命中情况
DBMS_OUTLN.del_outline();                                    删除内存和持久化表中的 outline
DBMS_OUTLN.flush_outline();                                刷新所有的 outline,从 mysql.outline 表中重新 load

DBMS_OUTLNの使用の導入を容易にするために、ここでいくつかのテストテーブルを使用しました:

 CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col1` int(11) DEFAULT NULL,
  `col2` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ind_1` (`col1`),
  KEY `ind_2` (`col2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `t2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col1` int(11) DEFAULT NULL,
  `col2` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ind_1` (`col1`),
  KEY `ind_2` (`col2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ADD_INDEX_OUTLINE

構文とパラメータ

CALL DBMS_OUTLN.add_index_outline(schema=>, digest=>, position=>, type=>,
                                  scope=>, hint=>, query=>);

说明:
digest 和 query 可以选择其一, 如果填写了原始query语句,这个 proc 会计算 digest 和 digest text。

テストケース1

テストステートメント

select * from t1 where t1.col1 =1 and t1.col2 ='xpchild';

  
 インデックスIND_1を使用します

call dbms_outln.add_index_outline('outline_db', '', 1, 'USE INDEX', 'ind_1', '',
                                 "select * from t1 where t1.col1 =1 and t1.col2 ='xpchild'");

查看 outline:

mysql> call dbms_outln.show_outline();
+------+------------+------------------------------------------------------------------+-----------+-------+------+-------+------+----------+------------------------------------------------------------------+
| ID   | SCHEMA     | DIGEST                                                           | TYPE      | SCOPE | POS  | HINT  | HIT  | OVERFLOW | DIGEST_TEXT                                                      |
+------+------------+------------------------------------------------------------------+-----------+-------+------+-------+------+----------+------------------------------------------------------------------+
|   30 | outline_db | b4369611be7ab2d27c85897632576a04bc08f50b928a1d735b62d0a140628c4c | USE INDEX |       |    1 | ind_1 |    0 |        0 | SELECT * FROM `t1` WHERE `t1` . `col1` = ? AND `t1` . `col2` = ? |
+------+------------+------------------------------------------------------------------+-----------+-------+------+-------+------+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

概要を確認します。

アウトライン効果を確認し、2つの方法があります。

  1. dbms_outln.preview_outline()のプレビュー
  2. 直接閲覧を説明します。
mysql> call dbms_outln.preview_outline('outline_db', "select * from t1 where t1.col1 =1 and t1.col2 ='xpchild'");
+------------+------------------------------------------------------------------+------------+------------+-------+---------------------+
| SCHEMA     | DIGEST                                                           | BLOCK_TYPE | BLOCK_NAME | BLOCK | HINT                |
+------------+------------------------------------------------------------------+------------+------------+-------+---------------------+
| outline_db | b4369611be7ab2d27c85897632576a04bc08f50b928a1d735b62d0a140628c4c | TABLE      | t1         |     1 | USE INDEX (`ind_1`) |
+------------+------------------------------------------------------------------+------------+------------+-------+---------------------+
1 row in set (0.01 sec)


mysql> explain select * from t1 where t1.col1 =1 and t1.col2 ='xpchild';
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key   | key_len | ref   | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
|  1 | SIMPLE      | t1    | NULL       | ref  | ind_1         | ind_1 | 5       | const |    1 |   100.00 | Using where |
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+-------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                                                                                                                                                                 |
+-------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Note  | 1003 | /* select#1 */ select `outline_db`.`t1`.`id` AS `id`,`outline_db`.`t1`.`col1` AS `col1`,`outline_db`.`t1`.`col2` AS `col2` from `outline_db`.`t1` USE INDEX (`ind_1`) where ((`outline_db`.`t1`.`col1` = 1) and (`outline_db`.`t1`.`col2` = 'xpchild')) |
+-------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

テストケース2

ステートメントをテストします:

select * from t1, t2 where t1.col1 = t2.col1 and t2.col2 ='xpchild'

ind_2インデックスt2のテーブルを使用してテストします:

call dbms_outln.add_index_outline('outline_db', '', 2, 'USE INDEX', 'ind_2', '',
                                 "select * from t1, t2 where t1.col1 = t2.col1 and t2.col2 ='xpchild'");

 
概要を確認します。

mysql> explain select * from t1, t2 where t1.col1 = t2.col1 and t2.col2 ='xpchild';
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key   | key_len | ref   | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
|  1 | SIMPLE      | t1    | NULL       | ALL  | ind_1         | NULL  | NULL    | NULL  |    1 |   100.00 | NULL        |
|  1 | SIMPLE      | t2    | NULL       | ref  | ind_2         | ind_2 | 303     | const |    1 |   100.00 | Using where |
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
2 rows in set, 1 warning (0.01 sec)

mysql> show warnings;
+-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                                                                                                                                                                                                                                                                                                                    |
+-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Note  | 1003 | /* select#1 */ select `outline_db`.`t1`.`id` AS `id`,`outline_db`.`t1`.`col1` AS `col1`,`outline_db`.`t1`.`col2` AS `col2`,`outline_db`.`t2`.`id` AS `id`,`outline_db`.`t2`.`col1` AS `col1`,`outline_db`.`t2`.`col2` AS `col2` from `outline_db`.`t1` join `outline_db`.`t2` USE INDEX (`ind_2`) where ((`outline_db`.`t2`.`col1` = `outline_db`.`t1`.`col1`) and (`outline_db`.`t2`.`col2` = 'xpchild')) |
+-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

ADD_OPTIMIZER_OUTLINE

構文とパラメータ

CALL DBMS_OUTLN.add_optimizer_outline(schema=>, digest=>, query_block=>
                                      hint=>, query=>);
                                    
说明:digest 和 query 同样可以填其一,或者都填入。proc 会自动计算digest 和 digest text。

テストケース1

グローバルmax_execution_timeに/ SET VARオプティマイザ・ヒントを増やします。

CALL DBMS_OUTLN.add_optimizer_outline("outline_db", '', 1, '/*+ MAX_EXECUTION_TIME(1000) */',
                                      "select * from t1 where id = 1");
CALL DBMS_OUTLN.add_optimizer_outline("outline_db", '', 1, '/*+ SET_VAR(foreign_key_checks=OFF) */',
                                      "select * from t1 where id = 1");

概要を確認します。

mysql> explain select * from t1 where id = 1;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+--------------------------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                          |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+--------------------------------+
|  1 | SIMPLE      | NULL  | NULL       | NULL | NULL          | NULL | NULL    | NULL | NULL |     NULL | no matching row in const table |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+--------------------------------+
1 row in set, 1 warning (0.01 sec)

mysql> show warnings;
+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                                                                                                 |
+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Note  | 1003 | /* select#1 */ select /*+ MAX_EXECUTION_TIME(1000) SET_VAR(foreign_key_checks='OFF') */ NULL AS `id`,NULL AS `col1`,NULL AS `col2` from `outline_db`.`t1` where multiple equal(1, NULL) |
+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

テストケース2

 マルチテーブルのクエリに関連するテスト:ネストされたループ処理に参加

CALL DBMS_OUTLN.add_optimizer_outline('outline_db', '', 1, '/*+ BNL(t1,t2) */',
                                      "select t1.id, t2.id from t1,t2");

概要を確認します。

mysql> explain select t1.id, t2.id from t1,t2;
+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+----------------------------------------------------+
| id | select_type | table | partitions | type  | possible_keys | key   | key_len | ref  | rows | filtered | Extra                                              |
+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+----------------------------------------------------+
|  1 | SIMPLE      | t1    | NULL       | index | NULL          | ind_1 | 5       | NULL |    1 |   100.00 | Using index                                        |
|  1 | SIMPLE      | t2    | NULL       | index | NULL          | ind_1 | 5       | NULL |    1 |   100.00 | Using index; Using join buffer (Block Nested Loop) |
+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+----------------------------------------------------+
2 rows in set, 1 warning (0.01 sec)

mysql> show warnings;
+-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                                                                                            |
+-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Note  | 1003 | /* select#1 */ select /*+ BNL(`t1`@`select#1`) BNL(`t2`@`select#1`) */ `outline_db`.`t1`.`id` AS `id`,`outline_db`.`t2`.`id` AS `id` from `outline_db`.`t1` join `outline_db`.`t2` |
+-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

テストケース3

 問合せブロック名を使用してテストサブクエリの場合

CALL DBMS_OUTLN.add_optimizer_outline('outline_db', '', 2, ' /*+ QB_NAME(subq1) */', 
                                      "SELECT * FROM t1 WHERE t1.col1 IN (SELECT col1 FROM t2)");

CALL DBMS_OUTLN.add_optimizer_outline('outline_db', '', 1, '/*+ SEMIJOIN(@subq1 MATERIALIZATION, DUPSWEEDOUT) */ ',
                                      "SELECT * FROM t1 WHERE t1.col1 IN (SELECT col1 FROM t2)");

概要を確認します。

mysql> explain SELECT * FROM t1 WHERE t1.col1 IN (SELECT  col1 FROM t2);
+----+--------------+-------------+------------+--------+---------------+------------+---------+--------------------+------+----------+-------------+
| id | select_type  | table       | partitions | type   | possible_keys | key        | key_len | ref                | rows | filtered | Extra       |
+----+--------------+-------------+------------+--------+---------------+------------+---------+--------------------+------+----------+-------------+
|  1 | SIMPLE       | t1          | NULL       | ALL    | ind_1         | NULL       | NULL    | NULL               |    1 |   100.00 | Using where |
|  1 | SIMPLE       | <subquery2> | NULL       | eq_ref | <auto_key>    | <auto_key> | 5       | outline_db.t1.col1 |    1 |   100.00 | NULL        |
|  2 | MATERIALIZED | t2          | NULL       | index  | ind_1         | ind_1      | 5       | NULL               |    1 |   100.00 | Using index |
+----+--------------+-------------+------------+--------+---------------+------------+---------+--------------------+------+----------+-------------+
3 rows in set, 1 warning (0.00 sec)

mysql> show warnings;
+-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                                                                                                                                                                                                        |
+-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Note  | 1003 | /* select#1 */ select /*+ SEMIJOIN(@`subq1` MATERIALIZATION, DUPSWEEDOUT) */ `outline_db`.`t1`.`id` AS `id`,`outline_db`.`t1`.`col1` AS `col1`,`outline_db`.`t1`.`col2` AS `col2` from `outline_db`.`t1` semi join (`outline_db`.`t2`) where (`<subquery2>`.`col1` = `outline_db`.`t1`.`col1`) |
+-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

PREVIEW_OUTLINE

特定のSQL文、マニュアル検証のためのマッチングアウトラインビューを使用するためのdbms_outln.preview_outline()。
構文およびパラメータ:

CALL DBMS_OUTLN.preview_outline(schema=>, query=>);

例えば:

mysql> call dbms_outln.preview_outline('outline_db', "select * from t1 where t1.col1 =1 and t1.col2 ='xpchild'");
+------------+------------------------------------------------------------------+------------+------------+-------+---------------------+
| SCHEMA     | DIGEST                                                           | BLOCK_TYPE | BLOCK_NAME | BLOCK | HINT                |
+------------+------------------------------------------------------------------+------------+------------+-------+---------------------+
| outline_db | b4369611be7ab2d27c85897632576a04bc08f50b928a1d735b62d0a140628c4c | TABLE      | t1         |     1 | USE INDEX (`ind_1`) |
+------------+------------------------------------------------------------------+------------+------------+-------+---------------------+
1 row in set (0.00 sec)

SHOW_OUTLINE

:キャッシュメモリにヒットし、内部の二つのフィールドがあります示しdbms_outln.show_outline概要
HITは:ヒットの数を示す概要
説明アウトライン問合せブロックが見つからないヒントやテーブルを対応する回数:OVERFLOWを

例えば:

mysql> call dbms_outln.show_outline();
+------+------------+------------------------------------------------------------------+-----------+-------+------+-------------------------------------------------------+------+----------+-------------------------------------------------------------------------------------+
| ID   | SCHEMA     | DIGEST                                                           | TYPE      | SCOPE | POS  | HINT                                                  | HIT  | OVERFLOW | DIGEST_TEXT                                                                         |
+------+------------+------------------------------------------------------------------+-----------+-------+------+-------------------------------------------------------+------+----------+-------------------------------------------------------------------------------------+
|   33 | outline_db | 36bebc61fce7e32b93926aec3fdd790dad5d895107e2d8d3848d1c60b74bcde6 | OPTIMIZER |       |    1 | /*+ SET_VAR(foreign_key_checks=OFF) */                |    1 |        0 | SELECT * FROM `t1` WHERE `id` = ?                                                   |
|   32 | outline_db | 36bebc61fce7e32b93926aec3fdd790dad5d895107e2d8d3848d1c60b74bcde6 | OPTIMIZER |       |    1 | /*+ MAX_EXECUTION_TIME(1000) */                       |    2 |        0 | SELECT * FROM `t1` WHERE `id` = ?                                                   |
|   34 | outline_db | d4dcef634a4a664518e5fb8a21c6ce9b79fccb44b773e86431eb67840975b649 | OPTIMIZER |       |    1 | /*+ BNL(t1,t2) */                                     |    1 |        0 | SELECT `t1` . `id` , `t2` . `id` FROM `t1` , `t2`                                   |
|   35 | outline_db | 5a726a609b6fbfb76bb8f9d2a24af913a2b9d07f015f2ee1f6f2d12dfad72e6f | OPTIMIZER |       |    2 |  /*+ QB_NAME(subq1) */                                |    2 |        0 | SELECT * FROM `t1` WHERE `t1` . `col1` IN ( SELECT `col1` FROM `t2` )               |
|   36 | outline_db | 5a726a609b6fbfb76bb8f9d2a24af913a2b9d07f015f2ee1f6f2d12dfad72e6f | OPTIMIZER |       |    1 | /*+ SEMIJOIN(@subq1 MATERIALIZATION, DUPSWEEDOUT) */  |    2 |        0 | SELECT * FROM `t1` WHERE `t1` . `col1` IN ( SELECT `col1` FROM `t2` )               |
|   30 | outline_db | b4369611be7ab2d27c85897632576a04bc08f50b928a1d735b62d0a140628c4c | USE INDEX |       |    1 | ind_1                                                 |    3 |        0 | SELECT * FROM `t1` WHERE `t1` . `col1` = ? AND `t1` . `col2` = ?                    |
|   31 | outline_db | 33c71541754093f78a1f2108795cfb45f8b15ec5d6bff76884f4461fb7f33419 | USE INDEX |       |    2 | ind_2                                                 |    1 |        0 | SELECT * FROM `t1` , `t2` WHERE `t1` . `col1` = `t2` . `col1` AND `t2` . `col2` = ? |
+------+------------+------------------------------------------------------------------+-----------+-------+------+-------------------------------------------------------+------+----------+-------------------------------------------------------------------------------------+
7 rows in set (0.00 sec)

DEL_OUTLINE

dbms_outln.del_outlineは()、メモリおよびテーブル特定のアウトラインを削除することができます。

次のように構文とパラメータは次のとおりです。

CALL DBMS_OUTLN.del_outline(outline_id=>);

例えば:

mysql> call dbms_outln.del_outline(1000);
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> show warnings;
+---------+------+----------------------------------------------+
| Level   | Code | Message                                      |
+---------+------+----------------------------------------------+
| Warning | 7521 | Statement outline 1000 is not found in table |
| Warning | 7521 | Statement outline 1000 is not found in cache |
+---------+------+----------------------------------------------+
2 rows in set (0.00 sec)

FLUSH_OUTLINE

mysql.outlineテーブルからクリーンアップのアウトラインのキャッシュ、および再ロードをサポートするためのdbms_outln.flush_outline()。
ユーザが直接アウトラインをロードするために、テーブルを変更する場合は、キャッシュをフラッシュするために呼び出す必要があります。

例えば:

mysql> call dbms_outln.flush_outline(); 
Query OK, 0 rows affected (0.01 sec)

おすすめ

転載: yq.aliyun.com/articles/707398