前回の記事「会話とロック情報のクエリビュー| sysシステムライブラリの包括的な理解」では、sysシステムライブラリの一般的なビューを使用してセッションステータス情報をクエリし、待機情報をロックする方法を紹介しました。この問題の内容を最初に紹介します。クエリテーブルとインデックスに関連する統計のクイックビュー。sysシステムライブラリのシステム学習の旅を開始するために私たちに従ってください。
PS:この記事で説明したビュー機能の特殊性により(DBAは、日常業務でのデータ分析のために統計情報を照会する必要がある場合があります)、一部のビューのselectステートメントのテキストを以下にリストして、誰もがより直感的に理解できるようにします。それらを学ぶために。
01
schema_auto_increment_columns
すべてのデータベース(システムディクショナリライブラリmysql、sys、INFORMATION_SCHEMA、performance_schemaを除く)で、自動インクリメント列と関連情報を含むベーステーブルを検索します。デフォルトでは、自動インクリメントの使用率と自動インクリメント列タイプの最大値に従って降順で並べ替えられます。データソース:INFORMATION_SCHEMAの列、表
このビューはMySQL5.7.9で追加されました
クエリテキストを表示
SELECT TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
COLUMN_TYPE,
(LOCATE('unsigned', COLUMN_TYPE) = 0) AS is_signed,
(LOCATE('unsigned', COLUMN_TYPE) > 0) AS is_unsigned,
(
CASE DATA_TYPE
WHEN 'tinyint' THEN 255
WHEN 'smallint' THEN 65535
WHEN 'mediumint' THEN 16777215
WHEN 'int' THEN 4294967295
WHEN 'bigint' THEN 18446744073709551615
END >> IF(LOCATE('unsigned', COLUMN_TYPE) > 0, 0, 1)
) AS max_value,
AUTO_INCREMENT,
AUTO_INCREMENT / (
CASE DATA_TYPE
WHEN 'tinyint' THEN 255
WHEN 'smallint' THEN 65535
WHEN 'mediumint' THEN 16777215
WHEN 'int' THEN 4294967295
WHEN 'bigint' THEN 18446744073709551615
END >> IF(LOCATE('unsigned', COLUMN_TYPE) > 0, 0, 1)
) AS auto_increment_ratio
FROM INFORMATION_SCHEMA.COLUMNS
INNER JOIN INFORMATION_SCHEMA.TABLES USING (TABLE_SCHEMA, TABLE_NAME)
WHERE TABLE_SCHEMA NOT IN ('mysql', 'sys', 'INFORMATION_SCHEMA', 'performance_schema')
AND TABLE_TYPE='BASE TABLE'
AND EXTRA='auto_increment'
ORDER BY auto_increment_ratio DESC, max_value;
このビューを使用して、クエリによって返される結果を見てみましょう。
admin@localhost : sys 11:11:58> select * from schema_auto_increment_columns limit 5;
+--------------+------------+-------------+-----------+------------------+-----------+-------------+------------+----------------+----------------------+
| table_schema | table_name | column_name | data_type | column_type | is_signed | is_unsigned | max_value | auto_increment | auto_increment_ratio |
+--------------+------------+-------------+-----------+------------------+-----------+-------------+------------+----------------+----------------------+
| sbtest | sbtest1 | id | int | int(10) unsigned | 0 | 1 | 4294967295 | 10713891 | 0.0025 |
| sbtest | sbtest2 | id | int | int(10) unsigned | 0 | 1 | 4294967295 | 10710865 | 0.0025 |
| sbtest | sbtest3 | id | int | int(10) unsigned | 0 | 1 | 4294967295 | 10714919 | 0.0025 |
| sbtest | sbtest4 | id | int | int(10) unsigned | 0 | 1 | 4294967295 | 10714039 | 0.0025 |
| sbtest | sbtest5 | id | int | int(10) unsigned | 0 | 1 | 4294967295 | 10713075 | 0.0025 |
+--------------+------------+-------------+-----------+------------------+-----------+-------------+------------+----------------+----------------------+
5 rows in set (1.50 sec)
ビューフィールドの意味は次のとおりです。
TABLE_SCHEMA:自己インクリメントテーブルのスキーマ名
TABLE_NAME:AUTO_INCREMENT値を含むテーブルの名前
column_name:AUTO_INCREMENT値の列名
data_type:自動インクリメント列のデータタイプ
COLUMN_TYPE:自己インクリメント列の列属性タイプ。つまり、他の情報がデータタイプに追加されます。例:bigint(20)unsignedの場合、情報全体は列属性タイプと呼ばれ、データタイプは単にbigintを参照します。
is_signed:列タイプが署名されているかどうか
is_unsigned:列タイプが符号なしかどうか
MAX_VALUE:自動インクリメント列の最大値
auto_increment:自動インクリメント列の現在のAUTO_INCREMENT属性値
auto_increment_ratio:自動インクリメント列の現在の使用率を示す、自動インクリメント列の最大自己インクリメント値に対する、自動インクリメント列によって現在使用されている自己インクリメント値の比率。
02
schema_index_statistics、x $ schema_index_statistics
インデックス統計は、デフォルトで、インデックスを使用した操作の追加、削除、変更、およびチェックの合計遅延時間(実行時間)の降順で並べ替えられます。データソース:performance_schema.table_io_waits_summary_by_index_usage
クエリテキストを表示
# 不带x$前缀的视图
SELECT OBJECT_SCHEMA AS table_schema,
OBJECT_NAME AS table_name,
INDEX_NAME as index_name,
COUNT_FETCH AS rows_selected,
sys.format_time(SUM_TIMER_FETCH) AS select_latency,
COUNT_INSERT AS rows_inserted,
sys.format_time(SUM_TIMER_INSERT) AS insert_latency,
COUNT_UPDATE AS rows_updated,
sys.format_time(SUM_TIMER_UPDATE) AS update_latency,
COUNT_DELETE AS rows_deleted,
sys.format_time(SUM_TIMER_INSERT) AS delete_latency
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE index_name IS NOT NULL
ORDER BY sum_timer_wait DESC;
# 带x$前缀的视图查询语句与不带x$前缀的视图查询语句相比,只是少了单位格式化函数
......
このビューを使用して、クエリによって返される結果を見てみましょう。
# 不带x$前缀的视图
admin@localhost : sys 11:19:43> select * from schema_index_statistics limit 5;
+--------------+------------+------------+---------------+----------------+---------------+----------------+--------------+----------------+--------------+----------------+
| table_schema | table_name | index_name | rows_selected | select_latency | rows_inserted | insert_latency | rows_updated | update_latency | rows_deleted | delete_latency |
+--------------+------------+------------+---------------+----------------+---------------+----------------+--------------+----------------+--------------+----------------+
| xiaoboluo | test | PRIMARY | 1159 | 3.57 s | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps |
| sys | sys_config | PRIMARY | 1 | 62.53 ms | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps |
| sbtest | sbtest1 | i_c | 20 | 31.43 ms | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps |
| xiaoboluo | test | i_test | 400 | 3.77 ms | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps |
| luoxiaobo | public_num | PRIMARY | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps |
+--------------+------------+------------+---------------+----------------+---------------+----------------+--------------+----------------+--------------+----------------+
5 rows in set (0.45 sec)
# 带x$前缀的视图
admin@localhost : sys 11:20:21> select * from x$schema_index_statistics limit 5;
+--------------+------------+------------+---------------+----------------+---------------+----------------+--------------+----------------+--------------+----------------+
| table_schema | table_name | index_name | rows_selected | select_latency | rows_inserted | insert_latency | rows_updated | update_latency | rows_deleted | delete_latency |
+--------------+------------+------------+---------------+----------------+---------------+----------------+--------------+----------------+--------------+----------------+
| xiaoboluo | test | PRIMARY | 1159 | 3573795058125 | 0 | 0 | 0 | 0 | 0 | 0 |
| sys | sys_config | PRIMARY | 1 | 62528964375 | 0 | 0 | 0 | 0 | 0 | 0 |
| sbtest | sbtest1 | i_c | 20 | 31429669125 | 0 | 0 | 0 | 0 | 0 | 0 |
| xiaoboluo | test | i_test | 400 | 3765146625 | 0 | 0 | 0 | 0 | 0 | 0 |
| luoxiaobo | public_num | PRIMARY | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+--------------+------------+------------+---------------+----------------+---------------+----------------+--------------+----------------+--------------+----------------+
5 rows in set (0.00 sec)
ビューフィールドの意味は次のとおりです。
TABLE_SCHEMA:インデックステーブルを含むスキーマの名前
TABLE_NAME:インデックスを含むテーブルの名前
INDEX_NAME:インデックスの名前
rows_selected:インデックスを使用して読み取られたデータの合計行数
select_latency:インデックスを使用した読み取りの合計待ち時間(実行時間)
rows_inserted:インデックスに挿入された行の総数
insert_latency:インデックス行を挿入するための合計待ち時間(実行時間)
rows_updated:インデックスによって更新された行の総数
update_latency:インデックス更新行の合計遅延時間(実行時間)
rows_deleted:インデックスから削除された行の総数
delete_latency:インデックスから行を削除するための合計遅延時間(実行時間)
03
schema_object_overview
各スキーマに含まれるテーブル、ビュー、インデックス、およびその他のオブジェクトの統計情報は、デフォルトでスキーマ名とオブジェクトタイプに従って並べ替えられます。データソース:ルーチン、テーブル、統計、トリガー、information_schemaのイベント
注:データベースオブジェクトが多数あるMySQLインスタンスの場合、このビューが完了するまでに長い時間がかかる場合があります
クエリテキストを表示
SELECT ROUTINE_SCHEMA AS db, ROUTINE_TYPE AS object_type, COUNT(*) AS count FROM information_schema.routines GROUP BY ROUTINE_SCHEMA, ROUTINE_TYPE
UNION
SELECT TABLE_SCHEMA, TABLE_TYPE, COUNT(*) FROM information_schema.tables GROUP BY TABLE_SCHEMA, TABLE_TYPE
UNION
SELECT TABLE_SCHEMA, CONCAT('INDEX (', INDEX_TYPE, ')'), COUNT(*) FROM information_schema.statistics GROUP BY TABLE_SCHEMA, INDEX_TYPE
UNION
SELECT TRIGGER_SCHEMA, 'TRIGGER', COUNT(*) FROM information_schema.triggers GROUP BY TRIGGER_SCHEMA
UNION
SELECT EVENT_SCHEMA, 'EVENT', COUNT(*) FROM information_schema.events GROUP BY EVENT_SCHEMA
ORDER BY DB, OBJECT_TYPE;
このビューを使用して、クエリによって返される結果を見てみましょう。
admin@localhost : sys 11:20:27> select * from schema_object_overview limit 10;
+--------------------+---------------+-------+
| db | object_type | count |
+--------------------+---------------+-------+
| information_schema | SYSTEM VIEW | 61 |
| luoxiaobo | BASE TABLE | 3 |
| luoxiaobo | INDEX (BTREE) | 3 |
| mysql | BASE TABLE | 31 |
| mysql | INDEX (BTREE) | 69 |
| performance_schema | BASE TABLE | 87 |
| qfsys | BASE TABLE | 1 |
| qfsys | INDEX (BTREE) | 1 |
| sbtest | BASE TABLE | 8 |
| sbtest | INDEX (BTREE) | 17 |
+--------------------+---------------+-------+
10 rows in set (0.27 sec)
ビューフィールドの意味は次のとおりです。
db:スキーマ名
OBJECT_TYPE:データベースオブジェクトタイプ、有効な値は次のとおりです:BASE TABLE、INDEX(index_type)、EVENT、FUNCTION、PROCEDURE、TRIGGER、VIEW
count:各スキーマ内のデータベースオブジェクトの数
04
schema_redundant_indexes
重複または冗長なインデックスを検索します。データソース:sys.x $ schema_flattened_keys、データソースビューはschema_redundant_indexesビューの補助ビューと呼ばれます
schema_redundant_indexesビューがMySQL5.7.9に追加されました
このビューを使用して、クエリによって返される結果を見てみましょう。
admin@localhost : sys 11:21:13> select * from schema_redundant_indexes limit 1\G;
*************************** 1. row ***************************
table_schema: test
table_name: test
redundant_index_name: i_id
redundant_index_columns: id
redundant_index_non_unique: 1
dominant_index_name: i_id_id2
dominant_index_columns: id,id2
dominant_index_non_unique: 1
subpart_exists: 0
sql_drop_index: ALTER TABLE `test`.`test` DROP INDEX `i_id`
1 row in set (0.01 sec)
ビューフィールドの意味は次のとおりです。
TABLE_SCHEMA:冗長または重複したインデックスを含むテーブルに対応するスキーマ名
TABLE_NAME:冗長または重複したインデックスを含むテーブルの名前
redundant_index_name:冗長または重複したインデックス名
redundant_index_columns:冗長または重複するインデックス列名
redundant_index_non_unique:冗長または重複したインデックス内の一意でない列の数
dominant_index_name:重複または冗長なインデックスと比較した支配的な(最良の)インデックス名
dominant_index_columns:ドミナント(最良)インデックスの列名
dominant_index_non_unique:ドミナント(最良)インデックス内の一意でない列の数
subpart_exists:重複インデックスまたは冗長インデックスがプレフィックスインデックスであるかどうか
sql_drop_index:繰り返されるインデックスまたは冗長なインデックスに対して生成されたドロップインデックスステートメント
05
schema_table_statistics、x $ schema_table_statistics
テーブルの統計を表示します。デフォルトでは、テーブルI / Oの合計待ち時間(実行時間。テーブルI / Oの競合が最も多いテーブルとしても理解できます)は、追加、削除、変更、およびクエリ操作のテーブルI / Oの合計遅延時間に従って降順で並べ替えられます。データソース:performance_schema .table_io_waits_summary_by_table、sys.x $ ps_schema_table_statistics_io
これらのビューは、補助ビューx $ ps_schema_table_statistics_ioを使用します
このビューを使用して、クエリによって返される結果を見てみましょう。
# 不带x$前缀的视图
admin@localhost : sys 11:52:25> select * from schema_table_statistics limit 1\G
*************************** 1. row ***************************
table_schema: xiaoboluo
table_name: test
total_latency: 2.10 m
rows_fetched: 1561
fetch_latency: 2.08 m
rows_inserted: 1159
insert_latency: 865.33 ms
rows_updated: 0
update_latency: 0 ps
rows_deleted: 0
delete_latency: 0 ps
io_read_requests: 43
io_read: 178.86 KiB
io_read_latency: 15.00 ms
io_write_requests: 10
io_write: 160.00 KiB
io_write_latency: 76.24 us
io_misc_requests: 42
io_misc_latency: 9.38 ms
1 row in set (0.03 sec)
# 带x$前缀的视图
admin@localhost : sys 11:52:28> select * from x$schema_table_statistics limit 1\G;
*************************** 1. row ***************************
table_schema: xiaoboluo
table_name: test
total_latency: 125711643303375
rows_fetched: 1561
fetch_latency: 124846318302750
rows_inserted: 1159
insert_latency: 865325000625
rows_updated: 0
update_latency: 0
rows_deleted: 0
delete_latency: 0
io_read_requests: 43
io_read: 183148
io_read_latency: 15001512375
io_write_requests: 10
io_write: 163840
io_write_latency: 76237125
io_misc_requests: 42
io_misc_latency: 9384933000
1 row in set (0.02 sec)
ビューフィールドの意味は次のとおりです。
TABLE_SCHEMA:TABLE_NAMEフィールドを含むテーブルが配置されているスキーマの名前
TABLE_NAME:テーブル名
total_latency:テーブルの追加、削除、および変更のための、テーブルのI / Oイベントの合計遅延時間(実行時間)
rows_fetched:テーブルクエリ操作の場合の、テーブル読み取り操作のデータ行の総数。
fetch_latency:テーブルクエリ操作の場合の、テーブル選択操作のI / Oイベントの合計遅延時間(実行時間)
rows_inserted:テーブル挿入操作のデータ行の総数。
insert_latency:テーブル挿入操作の場合のテーブル挿入操作のI / Oイベント遅延時間(実行時間)
rows_updated:テーブル更新操作のテーブル更新操作のデータ行の総数。
update_latency:テーブル更新操作のテーブル更新操作のI / Oイベントの合計遅延時間(実行時間)
rows_deleted:テーブル削除操作の場合のテーブル削除操作のデータの合計行数
delete_latency:テーブル削除操作のI / Oイベントの合計遅延時間(実行時間)
io_read_requests:テーブル読み取り操作、テーブル.ibdおよび.frmファイルの読み取りI / O操作の要求の総数
io_read:テーブル読み取り操作、テーブル.ibdおよび.frmファイルの読み取りI / O操作に関連するすべてのファイル読み取り操作の合計バイト数
io_read_latency:テーブル読み取り操作に関連するすべてのファイル読み取り操作、およびテーブル.ibdファイルと.frmファイルの読み取りI / O操作の合計待ち時間(実行時間)
io_write_requests:テーブル書き込み操作、テーブル.ibdおよび.frmファイルの書き込みI / O操作に対する要求の総数。
io_write:テーブル書き込み操作に関連するすべてのファイル書き込み操作の合計バイト数、およびテーブル.ibdファイルと.frmファイルの書き込みI / O操作
io_write_latency:テーブル書き込み操作に関連するすべてのファイル書き込み操作、およびテーブル.ibdファイルと.frmファイルの書き込みI / O操作の合計待ち時間(実行時間)
io_misc_requests:その他のさまざまな操作に関連するすべてのファイルのI / O要求の総数、および.ibdファイルと.frmファイルのその他のその他のI / O操作
io_misc_latency:その他のさまざまな操作に関連するすべてのファイルのI / O要求、およびテーブル.ibdおよび.frmファイルのその他のI / O操作の合計待ち時間(実行時間)
06
schema_table_statistics_with_buffer、x $ schema_table_statistics_with_buffer
InnoDBバッファプール統計も含むテーブル統計のクエリデフォルトでは、合計テーブルI / O遅延時間(実行時間。これは、最も多くのテーブルI / O競合の存在としても理解できます。表)降順の並べ替え、データソース:performance_schema.table_io_waits_summary_by_table、sys.x $ ps_schema_table_statistics_io、sys.x $ innodb_buffer_stats_by_table
これらのビューは、補助ビューsys.x $ ps_schema_table_statistics_ioを使用します
このビューを使用して、クエリによって返される結果を見てみましょう。
# 不带x$前缀的视图
admin@localhost : sys 12:36:57> select * from schema_table_statistics_with_buffer limit 1\G;
*************************** 1. row ***************************
table_schema: xiaoboluo
table_name: test
rows_fetched: 1561
fetch_latency: 2.08 m
rows_inserted: 1159
insert_latency: 865.33 ms
rows_updated: 0
update_latency: 0 ps
rows_deleted: 0
delete_latency: 0 ps
io_read_requests: 48
io_read: 179.29 KiB
io_read_latency: 15.02 ms
io_write_requests: 10
io_write: 160.00 KiB
io_write_latency: 76.24 us
io_misc_requests: 47
io_misc_latency: 9.47 ms
innodb_buffer_allocated: 112.00 KiB
innodb_buffer_data: 48.75 KiB
innodb_buffer_free: 63.25 KiB
innodb_buffer_pages: 7
innodb_buffer_pages_hashed: 0
innodb_buffer_pages_old: 0
innodb_buffer_rows_cached: 1162
1 row in set (2.21 sec)
# 带x$前缀的视图
admin@localhost : sys 12:37:35> select * from x$schema_table_statistics_with_buffer limit 1\G;
*************************** 1. row ***************************
table_schema: xiaoboluo
table_name: test
rows_fetched: 1561
fetch_latency: 124846318302750
rows_inserted: 1159
insert_latency: 865325000625
rows_updated: 0
update_latency: 0
rows_deleted: 0
delete_latency: 0
io_read_requests: 48
io_read: 183595
io_read_latency: 15019373250
io_write_requests: 10
io_write: 163840
io_write_latency: 76237125
io_misc_requests: 47
io_misc_latency: 9465938250
innodb_buffer_allocated: 114688
innodb_buffer_data: 49917
innodb_buffer_free: 64771
innodb_buffer_pages: 7
innodb_buffer_pages_hashed: 0
innodb_buffer_pages_old: 0
innodb_buffer_rows_cached: 1162
1 row in set (2.12 sec)
ビューフィールドの意味は次のとおりです。
テーブルに関連する統計情報フィールドの意味は、ここでは省略されているビューschema_table_statisticsの意味と同じです。詳細については、schema_table_statistics、x $ schema_table_statisticsビューの説明セクションを参照してください。
innodb_buffer_allocated:現在テーブルに割り当てられているバッファプールの合計バイト数
innodb_buffer_data:現在テーブルに割り当てられているデータ部分によって使用されているバッファプールの合計バイト数
innodb_buffer_free:テーブルの非データ部分に現在割り当てられているバッファプールの合計バイト数(つまり、空きページが配置されているバイト数、計算式:innodb_buffer_allocated-innodb_buffer_data)
innodb_buffer_pages:現在テーブルに割り当てられているバッファプールの合計ページ数
innodb_buffer_pages_hashed:現在テーブルに割り当てられているアダプティブハッシュインデックスページの総数
innodb_buffer_pages_old:現在テーブルに割り当てられている古いページの総数(LRUリストの古いブロックサブリストのページ数)
innodb_buffer_rows_cached:バッファプール内のテーブル用にバッファリングされたデータの行の総数
07
schema_unused_indexes
デフォルトでスキーマ名とテーブル名でソートされた非アクティブなインデックス(インシデントのないインデックス、つまりインデックスが使用されたことがないことを意味します)を確認します。データソース:performance_schema.table_io_waits_summary_by_index_usage
サーバーの起動後にビューが長時間実行された後は、クエリされたデータの適用性が高くなります。そうしないと、統計データが正確でなく、一部のビジネスクエリロジックが正確である可能性があるため、ビューによってクエリされたデータの信頼性が低くなる可能性があります。クエリするには遅すぎます
クエリテキストを表示
SELECT object_schema,
object_name,
index_name
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE index_name IS NOT NULL
AND count_star = 0
AND object_schema != 'mysql'
AND index_name != 'PRIMARY'
ORDER BY object_schema, object_name;
このビューを使用して、クエリによって返される結果を見てみましょう。
admin@localhost : sys 12:40:28> select * from schema_unused_indexes limit 3;
+---------------+-------------+-------------------+
| object_schema | object_name | index_name |
+---------------+-------------+-------------------+
| luoxiaobo | public_num | public_name_index |
| sbtest | sbtest1 | k_1 |
| sbtest | sbtest2 | k_2 |
+---------------+-------------+-------------------+
3 rows in set (0.00 sec)
ビューフィールドの意味は次のとおりです。
object_schema:スキーマ名
OBJECT_NAME:テーブル名
INDEX_NAME:未使用のインデックス名
この号の内容はここで紹介されており、この号の参照リンクは次のとおりです。
https://dev.mysql.com/doc/refman/5.7/en/sys-schema-unused-indexes.html
https://dev.mysql.com/doc/refman/5.7/en/sys-schema-auto-increment-columns.html
https://dev.mysql.com/doc/refman/5.7/en/sys-schema-index-statistics.html
https://dev.mysql.com/doc/refman/5.7/en/sys-schema-object-overview.html
https://dev.mysql.com/doc/refman/5.7/en/sys-schema-redundant-indexes.html
https://dev.mysql.com/doc/refman/5.7/en/sys-schema-table-statistics.html
https://dev.mysql.com/doc/refman/5.7/en/sys-schema-table-statistics-with-buffer.html
|作者について
LuoXiaobo・データベーステクノロジーエキスパート
「千の金のレシピ-MySQLパフォーマンス最適化ピラミッドルール」、「データエコロジー:MySQLレプリケーションテクノロジーとプロダクションプラクティス」の著者の1人。MySQLアーキテクチャに精通し、オープンソーステクノロジーに特化するなど、データベース全体のチューニングに精通し、オープンソーステクノロジーの推進に熱心であり、オンラインおよびオフラインで多くの公開データベーストピック共有を行い、100近くのデータベース関連の研究記事を公開しています。
全文は終わりました。
MySQLをお楽しみください:)
TeacherYeの「MySQLCoreOptimization」クラスがMySQL8.0にアップグレードされました。コードをスキャンして、MySQL8.0の練習の旅を始めてください。