MySQL中的系統(tǒng)庫(kù)(sys系統(tǒng)庫(kù)、information_schema)調(diào)優(yōu)方法
MySQL性能調(diào)優(yōu)
MySQL 性能調(diào)優(yōu)是一個(gè)復(fù)雜且多維度的過(guò)程,下面從數(shù)據(jù)庫(kù)設(shè)計(jì)、查詢優(yōu)化、配置參數(shù)調(diào)整、硬件優(yōu)化幾個(gè)方面為你介紹相關(guān)的調(diào)優(yōu)方法。
數(shù)據(jù)庫(kù)設(shè)計(jì)優(yōu)化
- 合理設(shè)計(jì)表結(jié)構(gòu):確保表結(jié)構(gòu)遵循數(shù)據(jù)庫(kù)設(shè)計(jì)范式,減少數(shù)據(jù)冗余,同時(shí)要根據(jù)實(shí)際業(yè)務(wù)需求靈活調(diào)整,避免過(guò)度范式化導(dǎo)致的查詢復(fù)雜度過(guò)高。
- 選擇合適的數(shù)據(jù)類型:使用合適的數(shù)據(jù)類型可以減少存儲(chǔ)空間,提高查詢性能。例如,對(duì)于固定長(zhǎng)度的字符串使用
CHAR,對(duì)于可變長(zhǎng)度的字符串使用VARCHAR;對(duì)于整數(shù)類型,根據(jù)取值范圍選擇合適的類型,如TINYINT、SMALLINT等。 - 建立適當(dāng)?shù)乃饕?/strong>:索引可以加快數(shù)據(jù)的查找速度,但過(guò)多的索引會(huì)增加寫(xiě)操作的開(kāi)銷(xiāo),因此需要根據(jù)查詢需求建立適當(dāng)?shù)乃饕?。例如,?duì)于經(jīng)常用于
WHERE子句、JOIN條件和ORDER BY子句的列,可以考慮創(chuàng)建索引。
查詢優(yōu)化
- 避免全表掃描:盡量使用索引來(lái)避免全表掃描,例如在
WHERE子句中使用索引列進(jìn)行過(guò)濾。 - 優(yōu)化子查詢:子查詢可能會(huì)導(dǎo)致性能問(wèn)題,可以考慮使用
JOIN來(lái)替代子查詢。 - 減少不必要的列:在查詢時(shí)只選擇需要的列,避免使用
SELECT *。
配置參數(shù)調(diào)整
- 調(diào)整內(nèi)存分配:根據(jù)服務(wù)器的硬件資源和業(yè)務(wù)需求,調(diào)整
innodb_buffer_pool_size、key_buffer_size等參數(shù),以提高緩存命中率。 - 調(diào)整日志參數(shù):根據(jù)業(yè)務(wù)需求調(diào)整
log_bin、innodb_log_file_size等參數(shù),以平衡數(shù)據(jù)安全性和性能。
硬件優(yōu)化
- 使用高速存儲(chǔ)設(shè)備:如 SSD 可以顯著提高磁盤(pán) I/O 性能。
- 增加內(nèi)存:足夠的內(nèi)存可以減少磁盤(pán) I/O,提高查詢性能。
MySQL中的系統(tǒng)庫(kù)
1.3.sys系統(tǒng)庫(kù)
1.3.1.sys使用須知
sys系統(tǒng)庫(kù)支持MySQL 5.6或更高版本,不支持MySQL 5.5.x及以下版本。
sys系統(tǒng)庫(kù)通常都是提供給專業(yè)的DBA人員排查一些特定問(wèn)題使用的,其下所涉及的各項(xiàng)查詢或多或少都會(huì)對(duì)性能有一定的影響。
因?yàn)閟ys系統(tǒng)庫(kù)提供了一些代替直接訪問(wèn)performance_schema的視圖,所以必須啟用performance_schema(將performance_schema系統(tǒng)參數(shù)設(shè)置為ON),sys系統(tǒng)庫(kù)的大部分功能才能正常使用。
同時(shí)要完全訪問(wèn)sys系統(tǒng)庫(kù),用戶必須具有以下數(shù)據(jù)庫(kù)的管理員權(quán)限。
如果要充分使用sys系統(tǒng)庫(kù)的功能,則必須啟用某些performance_schema的功能。比如:
啟用所有的wait instruments:
CALL sys.ps_setup_enable_instrument('wait');
啟用所有事件類型的current表:
CALL sys.ps_setup_enable_consumer('current');

注意: performance_schema的默認(rèn)配置就可以滿足sys系統(tǒng)庫(kù)的大部分?jǐn)?shù)據(jù)收集功能。啟用所有需要功能會(huì)對(duì)性能產(chǎn)生一定的影響,因此最好僅啟用所需的配置。
1.3.2.sys系統(tǒng)庫(kù)使用
如果使用了USE語(yǔ)句切換默認(rèn)數(shù)據(jù)庫(kù),那么就可以直接使用sys系統(tǒng)庫(kù)下的視圖進(jìn)行查詢,就像查詢某個(gè)庫(kù)下的表一樣操作。也可以使用db_name.view_name、db_name.procedure_name、db_name.func_name等方式,在不指定默認(rèn)數(shù)據(jù)庫(kù)的情況下訪問(wèn)sys 系統(tǒng)庫(kù)中的對(duì)象(這叫作名稱限定對(duì)象引用)。

在sys系統(tǒng)庫(kù)下包含很多視圖,它們以各種方式對(duì)performance_schema表進(jìn)行聚合計(jì)算展示。這些視圖大部分是成對(duì)出現(xiàn)的,兩個(gè)視圖名稱相同,但有一個(gè)視圖是帶 x $前綴的.$
host_summary_by_file_io和 x$host_summary_by_file_io
代表按照主機(jī)進(jìn)行匯總統(tǒng)計(jì)的文件I/O性能數(shù)據(jù),兩個(gè)視圖訪問(wèn)的數(shù)據(jù)源是相同的,但是在創(chuàng)建視圖的語(yǔ)句中,不帶x$前綴的視圖顯示的是相關(guān)數(shù)值經(jīng)過(guò)單位換算后的數(shù)據(jù)(單位是毫秒、秒、分鐘、小時(shí)、天等),帶 x$ 前綴的視圖顯示的是原始的數(shù)據(jù)(單位是皮秒)。



1.3.3.查看慢SQL語(yǔ)句慢在哪里
如果我們頻繁地在慢查詢?nèi)罩局邪l(fā)現(xiàn)某個(gè)語(yǔ)句執(zhí)行緩慢,且在表結(jié)構(gòu)、索引結(jié)構(gòu)、統(tǒng)計(jì)信息中都無(wú)法找出原因時(shí),則可以利用sys系統(tǒng)庫(kù)中的撒手锏:sys.session視圖結(jié)合performance_schema的等待事件來(lái)找出癥結(jié)所在。那么session視圖有什么用呢?使用它可以查看當(dāng)前用戶會(huì)話的進(jìn)程列表信息,看看當(dāng)前進(jìn)程到底再干什么,注意,這個(gè)視圖在MySQL 5.7.9中才出現(xiàn)。

首先需要啟用與等待事件相關(guān)功能:
call sys.ps_setup_enable_instrument('wait');
call sys.ps_setup_enable_consumer('wait');
然后模擬一下:
一個(gè)session中執(zhí)行
select sleep(30);
另外一個(gè)session中在sys庫(kù)中查詢:
select * from session where command='query' and conn_id !=connection_id()\G


查詢表的增、刪、改、查數(shù)據(jù)量和I/O耗時(shí)統(tǒng)計(jì)
select * from schema_table_statistics_with_buffer\G

1.3.4.小結(jié)
除此之外,通過(guò)sys還可以查詢查看InnoDB緩沖池中的熱點(diǎn)數(shù)據(jù)、查看是否有事務(wù)鎖等待、查看未使用的,冗余索引、查看哪些語(yǔ)句使用了全表掃描等等。
具體可以參考官網(wǎng):MySQL :: MySQL 5.7 Reference Manual :: 26 MySQL sys Schema
1.4.information_schema
1.4.1.什么是information_schema
information_schema提供了對(duì)數(shù)據(jù)庫(kù)元數(shù)據(jù)、統(tǒng)計(jì)信息以及有關(guān)MySQL Server信息的訪問(wèn)(例如:數(shù)據(jù)庫(kù)名或表名、字段的數(shù)據(jù)類型和訪問(wèn)權(quán)限等)。該庫(kù)中保存的信息也可以稱為MySQL的數(shù)據(jù)字典或系統(tǒng)目錄。
在每個(gè)MySQL 實(shí)例中都有一個(gè)獨(dú)立的information_schema,用來(lái)存儲(chǔ)MySQL實(shí)例中所有其他數(shù)據(jù)庫(kù)的基本信息。information_schema庫(kù)下包含多個(gè)只讀表(非持久表),所以在磁盤(pán)中的數(shù)據(jù)目錄下沒(méi)有對(duì)應(yīng)的關(guān)聯(lián)文件,且不能對(duì)這些表設(shè)置觸發(fā)器。雖然在查詢時(shí)可以使用USE語(yǔ)句將默認(rèn)數(shù)據(jù)庫(kù)設(shè)置為information_schema,但該庫(kù)下的所有表是只讀的,不能執(zhí)行INSERT、UPDATE、DELETE等數(shù)據(jù)變更操作。
針對(duì)information_schema下的表的查詢操作可以替代一些SHOW查詢語(yǔ)句(例如:SHOW DATABASES、SHOW TABLES等)。
注意:根據(jù)MySQL版本的不同,表的個(gè)數(shù)和存放是有所不同的。在MySQL 5.6版本中總共有59個(gè)表,在MySQL 5.7版本中,該schema下總共有61個(gè)表,


在MySQL 8.0版本中,該schema下的數(shù)據(jù)字典表(包含部分原Memory引擎臨時(shí)表)都遷移到了mysql schema下,且在mysql schema下這些數(shù)據(jù)字典表被隱藏,無(wú)法直接訪問(wèn),需要通過(guò)information_schema下的同名表進(jìn)行訪問(wèn)。
information_schema下的所有表使用的都是Memory和InnoDB存儲(chǔ)引擎,且都是臨時(shí)表,不是持久表,在數(shù)據(jù)庫(kù)重啟之后這些數(shù)據(jù)會(huì)丟失。在MySQL 的4個(gè)系統(tǒng)庫(kù)中,information_schema也是唯一一個(gè)在文件系統(tǒng)上沒(méi)有對(duì)應(yīng)庫(kù)表的目錄和文件的系統(tǒng)庫(kù)。
1.4.2.information_schema表分類
Server層的統(tǒng)計(jì)信息字典表
(1)COLUMNS
提供查詢表中的列(字段)信息。
(2)KEY_COLUMN_USAGE
提供查詢哪些索引列存在約束條件。
該表中的信息包含主鍵、唯一索引、外鍵等約束信息,例如:所在的庫(kù)表列名、引用的庫(kù)表列名等。該表中的信息與TABLE_CONSTRAINTS表中記錄的信息有些類似,但TABLE_CONSTRAINTS表中沒(méi)有記錄約束引用的庫(kù)表列信息,而KEY_COLUMN_USAGE表中卻記錄了TABLE_CONSTRAINTS表中所沒(méi)有的約束類型。
(3)REFERENTIAL_CONSTRAINTS
提供查詢關(guān)于外鍵約束的一些信息。
(4)STATISTICS
提供查詢關(guān)于索引的一些統(tǒng)計(jì)信息,一個(gè)索引對(duì)應(yīng)一行記錄。
(5)TABLE_CONSTRAINTS
提供查詢與表相關(guān)的約束信息。
(6)FILES
提供查詢與MySQL的數(shù)據(jù)表空間文件相關(guān)的信息。
(7)ENGINES
提供查詢MySQL Server支持的引擎相關(guān)信息。
(8)TABLESPACES
提供查詢關(guān)于活躍表空間的相關(guān)信息(主要記錄的是NDB存儲(chǔ)引擎的表空間信息)。
注意:該表不提供有關(guān)InnoDB存儲(chǔ)引擎的表空間信息。對(duì)于InnoDB表空間的元數(shù)據(jù)信息,請(qǐng)查詢INNODB_SYS_TABLESPACES表和INNODB_SYS_DATAFILES表。另外,從MySQL 5.7.8開(kāi)始,INFORMATION_SCHEMA.FILES表也提供查詢InnoDB表空間的元數(shù)據(jù)信息。
(9)SCHEMATA
提供查詢MySQL Server中的數(shù)據(jù)庫(kù)列表信息,一個(gè)schema就代表一個(gè)數(shù)據(jù)庫(kù)。
Server層的表級(jí)別對(duì)象字典表
(1)VIEWS
提供查詢數(shù)據(jù)庫(kù)中的視圖相關(guān)信息。查詢?cè)摫淼馁~戶需要擁有show view權(quán)限。
(2)TRIGGERS
提供查詢關(guān)于某個(gè)數(shù)據(jù)庫(kù)下的觸發(fā)器相關(guān)信息。
(3)TABLES
提供查詢與數(shù)據(jù)庫(kù)內(nèi)的表相關(guān)的基本信息。
(4)ROUTINES
提供查詢關(guān)于存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的信息(不包括用戶自定義函數(shù))。該表中的信息與mysql.proc中記錄的信息相對(duì)應(yīng)(如果該表中有值的話)。
(5)PARTITIONS
提供查詢關(guān)于分區(qū)表的信息。
(6)EVENTS
提供查詢與計(jì)劃任務(wù)事件相關(guān)的信息。
(7)PARAMETERS
提供有關(guān)存儲(chǔ)過(guò)程和函數(shù)的參數(shù)信息,以及有關(guān)存儲(chǔ)函數(shù)的返回值信息。這些參數(shù)信息與mysql.proc表中的param_list列記錄的內(nèi)容類似。
Server層的混雜信息字典表
(1)GLOBAL_STATUS、GLOBAL_VARIABLES、SESSION_STATUS、
SESSION_VARIABLES
提供查詢?nèi)帧?huì)話級(jí)別的狀態(tài)變量與系統(tǒng)變量信息。
(2)OPTIMIZER_TRACE
提供優(yōu)化程序跟蹤功能產(chǎn)生的信息。
跟蹤功能默認(rèn)是關(guān)閉的,使用optimizer_trace系統(tǒng)變量啟用跟蹤功能。如果開(kāi)啟該功能,則每個(gè)會(huì)話只能跟蹤它自己執(zhí)行的語(yǔ)句,不能看到其他會(huì)話執(zhí)行的語(yǔ)句,且每個(gè)會(huì)話只能記錄最后一條跟蹤的SQL語(yǔ)句。
(3)PLUGINS
提供查詢關(guān)于MySQL Server支持哪些插件的信息。
(4)PROCESSLIST
提供查詢一些關(guān)于線程運(yùn)行過(guò)程中的狀態(tài)信息。
(5)PROFILING
提供查詢關(guān)于語(yǔ)句性能分析的信息。其記錄內(nèi)容對(duì)應(yīng)于SHOW PROFILES和SHOW PROFILE語(yǔ)句產(chǎn)生的信息。該表只有在會(huì)話變量 profiling=1時(shí)才會(huì)記錄語(yǔ)句性能分析信息,否則該表不記錄。
注意:從MySQL 5.7.2開(kāi)始,此表不再推薦使用,在未來(lái)的MySQL版本中刪除,改用Performance Schema代替。
(6)CHARACTER_SETS
提供查詢MySQL Server支持的可用字符集。
(7)COLLATIONS
提供查詢MySQL Server支持的可用校對(duì)規(guī)則。
(8)COLLATION_CHARACTER_SET_APPLICABILITY
提供查詢MySQL Server中哪種字符集適用于什么校對(duì)規(guī)則。查詢結(jié)果集相當(dāng)于從SHOW COLLATION獲得的結(jié)果集的前兩個(gè)字段值。目前并沒(méi)有發(fā)現(xiàn)該表有太大的作用。
(9)COLUMN_PRIVILEGES
提供查詢關(guān)于列(字段)的權(quán)限信息,表中的內(nèi)容來(lái)自mysql.column_priv列權(quán)限表(需要針對(duì)一個(gè)表的列單獨(dú)授權(quán)之后才會(huì)有內(nèi)容)。
(10)SCHEMA_PRIVILEGES
提供查詢關(guān)于庫(kù)級(jí)別的權(quán)限信息,每種類型的庫(kù)級(jí)別權(quán)限記錄一行信息,該表中的信息來(lái)自mysql.db表。
(11)TABLE_PRIVILEGES
提供查詢關(guān)于表級(jí)別的權(quán)限信息,該表中的內(nèi)容來(lái)自mysql.tables_priv表。
(12)USER_PRIVILEGES
提供查詢?nèi)謾?quán)限的信息,該表中的信息來(lái)自mysql.user表。
10.2.4 InnoDB層的系統(tǒng)字典表
(1)INNODB_SYS_DATAFILES
提供查詢InnoDB所有表空間類型文件的元數(shù)據(jù)(內(nèi)部使用的表空間ID和表空間文件的路徑信息),包括獨(dú)立表空間、常規(guī)表空間、系統(tǒng)表空間、臨時(shí)表空間和undo空間(如果開(kāi)啟了獨(dú)立undo空間的話)。
該表中的信息等同于InnoDB數(shù)據(jù)字典內(nèi)部SYS_DATAFILES表的信息。
(2)INNODB_SYS_VIRTUAL
提供查詢有關(guān)InnoDB虛擬生成列和與之關(guān)聯(lián)的列的元數(shù)據(jù)信息,等同于InnoDB數(shù)據(jù)字典內(nèi)部SYS_VIRTUAL表的信息。該表中展示的行信息是與虛擬生成列相關(guān)聯(lián)列的每個(gè)列的信息。
(3)INNODB_SYS_INDEXES
提供查詢有關(guān)InnoDB索引的元數(shù)據(jù)信息,等同于InnoDB數(shù)據(jù)字典內(nèi)部SYS_INDEXES表中的信息。
(4)INNODB_SYS_TABLES
提供查詢有關(guān)InnoDB表的元數(shù)據(jù)信息,等同于InnoDB數(shù)據(jù)字典內(nèi)部SYS_TABLES表的信息。
(5)INNODB_SYS_FIELDS
提供查詢有關(guān)InnoDB索引鍵列(字段)的元數(shù)據(jù)信息,等同于InnoDB數(shù)據(jù)字典內(nèi)部SYS_FIELDS表的信息。
(6)INNODB_SYS_TABLESPACES
提供查詢有關(guān)InnoDB獨(dú)立表空間和普通表空間的元數(shù)據(jù)信息(也包含了全文索引表空間),等同于InnoDB數(shù)據(jù)字典內(nèi)部SYS_TABLESPACES表的信息。
(7)INNODB_SYS_FOREIGN_COLS
提供查詢有關(guān)InnoDB外鍵列的狀態(tài)信息,等同于InnoDB數(shù)據(jù)字典內(nèi)部
SYS_FOREIGN_COLS表的信息。
(8)INNODB_SYS_COLUMNS
提供查詢有關(guān)InnoDB表列的元數(shù)據(jù)信息,等同于InnoDB數(shù)據(jù)字典內(nèi)部
SYS_COLUMNS表的信息。
(9)INNODB_SYS_FOREIGN
提供查詢有關(guān)InnoDB外鍵的元數(shù)據(jù)信息,等同于InnoDB數(shù)據(jù)字典內(nèi)部SYS_FOREIGN表的信息。
(10)INNODB_SYS_TABLESTATS
提供查詢有關(guān)InnoDB表的較低級(jí)別的狀態(tài)信息視圖。 MySQL優(yōu)化器會(huì)使用這些統(tǒng)計(jì)信息數(shù)據(jù)來(lái)計(jì)算并確定在查詢InnoDB表時(shí)要使用哪個(gè)索引。這些信息保存在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)中,與存儲(chǔ)在磁盤(pán)上的數(shù)據(jù)無(wú)對(duì)應(yīng)關(guān)系。在InnoDB內(nèi)部也無(wú)對(duì)應(yīng)的系統(tǒng)表。
InnoDB層的鎖、事務(wù)、統(tǒng)計(jì)信息字典表
(1)INNODB_LOCKS
提供查詢InnoDB引擎中事務(wù)正在請(qǐng)求的且同時(shí)被其他事務(wù)阻塞的鎖信息(即沒(méi)有發(fā)生不同事務(wù)之間鎖等待的鎖信息,在這里是查看不到的。例如,當(dāng)只有一個(gè)事務(wù)時(shí),無(wú)法查看到該事務(wù)所加的鎖信息)。該表中的內(nèi)容可用于診斷高并發(fā)下的鎖爭(zhēng)用信息。
(2)INNODB_TRX
提供查詢當(dāng)前在InnoDB引擎中執(zhí)行的每個(gè)事務(wù)(不包括只讀事務(wù))的信息,包括事務(wù)是否正在等待鎖、事務(wù)什么時(shí)間點(diǎn)開(kāi)始,以及事務(wù)正在執(zhí)行的SQL語(yǔ)句文本信息等(如果有SQL語(yǔ)句的話)。
(3)INNODB_BUFFER_PAGE_LRU
提供查詢緩沖池中的頁(yè)面信息。與INNODB_BUFFER_PAGE表不同,INNODB_BUFFER_PAGE_LRU表保存有關(guān)InnoDB緩沖池中的頁(yè)如何進(jìn)入LRU鏈表,以及在緩沖池不夠用時(shí)確定需要從中逐出哪些頁(yè)的信息。
(4)INNODB_LOCK_WAITS
提供查詢InnoDB事務(wù)的鎖等待信息。如果查詢?cè)摫頌榭?,則表示無(wú)鎖等待信息;如果查詢?cè)摫碇杏杏涗?,則說(shuō)明存在鎖等待,表中的每一行記錄表示一個(gè)鎖等待關(guān)系。在一個(gè)鎖等待關(guān)系中包含:一個(gè)等待鎖(即,正在請(qǐng)求獲得鎖)的事務(wù)及其正在等待的鎖等信息、一個(gè)持有鎖(這里指的是發(fā)生鎖等待事務(wù)正在請(qǐng)求的鎖)的事務(wù)及其所持有的鎖等信息。
(5)INNODB_TEMP_TABLE_INFO
提供查詢有關(guān)在InnoDB實(shí)例中當(dāng)前處于活動(dòng)狀態(tài)的用戶(只對(duì)已建立連接的用戶有效,斷開(kāi)的用戶連接對(duì)應(yīng)的臨時(shí)表會(huì)被自動(dòng)刪除)創(chuàng)建的InnoDB臨時(shí)表的信息。它不提供查詢優(yōu)化器使用的內(nèi)部InnoDB臨時(shí)表的信息。該表在首次查詢時(shí)創(chuàng)建。
(6)INNODB_BUFFER_PAGE
提供查詢關(guān)于緩沖池中的頁(yè)相關(guān)信息。
(7)INNODB_METRICS
提供查詢InnoDB更為詳細(xì)的性能信息,是對(duì)InnoDB的performance_schema的補(bǔ)充。通過(guò)對(duì)該表的查詢,可用于檢查InnoDB的整體健康狀況,也可用于診斷性能瓶頸、資源短缺和應(yīng)用程序的問(wèn)題等。
(8)INNODB_BUFFER_POOL_STATS
提供查詢一些InnoDB緩沖池中的狀態(tài)信息,該表中記錄的信息與SHOW ENGINEINNODB STATUS語(yǔ)句輸出的緩沖池統(tǒng)計(jì)部分信息類似。另外,InnoDB緩沖池的一些狀態(tài)變量也提供了部分相同的值。
InnoDB層的全文索引字典表
(1)INNODB_FT_CONFIG
(2)INNODB_FT_BEING_DELETED
(3)INNODB_FT_DELETED
(4)INNODB_FT_DEFAULT_STOPWORD
(5)INNODB_FT_INDEX_TABLE
InnoDB層的壓縮相關(guān)字典表
(1)INNODB_CMP和INNODB_CMP_RESET
這兩個(gè)表中的數(shù)據(jù)包含了與壓縮的InnoDB表頁(yè)有關(guān)的操作狀態(tài)信息。表中記錄的數(shù)據(jù)為測(cè)量數(shù)據(jù)庫(kù)中的InnoDB表壓縮的有效性提供參考。
(2)INNODB_CMP_PER_INDEX和INNODB_CMP_PER_INDEX_RESET
這兩個(gè)表中記錄了與InnoDB壓縮表數(shù)據(jù)和索引相關(guān)的操作狀態(tài)信息,對(duì)數(shù)據(jù)庫(kù)、表、索引的每個(gè)組合使用不同的統(tǒng)計(jì)信息,以便為評(píng)估特定表的壓縮性能和實(shí)用性提供參考數(shù)據(jù)。
(3)INNODB_CMPMEM和INNODB_CMPMEM_RESET
這兩個(gè)表中記錄了InnoDB緩沖池中壓縮頁(yè)的狀態(tài)信息,為測(cè)量數(shù)據(jù)庫(kù)中InnoDB表壓縮的有效性提供參考。
1.4.3.information_schema應(yīng)用
查看索引列的信息
INNODB_SYS_FIELDS表提供查詢有關(guān)InnoDB索引列(字段)的元數(shù)據(jù)信息,等同于InnoDB數(shù)據(jù)字典中SYS_FIELDS表的信息。
INNODB_SYS_INDEXES表提供查詢有關(guān)InnoDB索引的元數(shù)據(jù)信息,等同于InnoDB數(shù)據(jù)字典內(nèi)部SYS_INDEXES表中的信息。
INNODB_SYS_TABLES表提供查詢有關(guān)InnoDB表的元數(shù)據(jù)信息,等同于InnoDB數(shù)據(jù)字典中SYS_TABLES表的信息。
假設(shè)需要查詢lijin庫(kù)下的InnoDB表order_exp的索引列名稱、組成和索引列順序等相關(guān)信息,


則可以使用如下SQL語(yǔ)句進(jìn)行查詢
SELECT t. NAME AS d_t_name, i. NAME AS i_name, i.type AS i_type, i.N_FIELDS AS i_column_numbers, f. NAME AS i_column_name, f.pos AS i_position FROM INNODB_SYS_TABLES AS t JOIN INNODB_SYS_INDEXES AS i ON t.TABLE_ID = i.TABLE_ID LEFT JOIN INNODB_SYS_FIELDS AS f ON i.INDEX_ID = f.INDEX_ID WHERE t. NAME = 'lijin/order_exp';

結(jié)果中的列都很好理解,唯一需要額外解釋的是i_type(INNODB_SYS_INDEXES.type),它是表示索引類型的數(shù)字ID:
0 =二級(jí)索引
1=集群索引
2 =唯一索引
3 =主鍵索引
32 =全文索引
64 =空間索引
128 =包含虛擬生成列的二級(jí)索引。
到此這篇關(guān)于MySQL中的系統(tǒng)庫(kù)(sys系統(tǒng)庫(kù)、information_schema)調(diào)優(yōu)方法的文章就介紹到這了,更多相關(guān)mysql sys系統(tǒng)庫(kù) information_schema介紹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL之information_schema數(shù)據(jù)庫(kù)詳細(xì)講解
- mysql報(bào)錯(cuò)1033 Incorrect information in file: ‘xxx.frm’問(wèn)題的解決方法
- mysql數(shù)據(jù)庫(kù)中的information_schema和mysql可以刪除嗎?
- 解析MySQL的information_schema數(shù)據(jù)庫(kù)
- MySQL數(shù)據(jù)庫(kù)基于sysbench實(shí)現(xiàn)OLTP基準(zhǔn)測(cè)試
- 通過(guò)sysbench工具實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的性能測(cè)試的方法
相關(guān)文章
MySQL使用IF語(yǔ)句及用case語(yǔ)句對(duì)條件并結(jié)果進(jìn)行判斷?
這篇文章主要介紹了MySQL使用IF語(yǔ)句及用case語(yǔ)句對(duì)條件并結(jié)果進(jìn)行判斷,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
啟動(dòng)與登錄Mysql實(shí)現(xiàn)方式
本文詳細(xì)介紹了MySQL服務(wù)的啟動(dòng)與停止方法,包括命令行和圖形工具操作,涵蓋登錄退出、數(shù)據(jù)庫(kù)查看及版本信息查詢等步驟,適用于Windows系統(tǒng)管理員和開(kāi)發(fā)者2025-08-08
php中關(guān)于mysqli和mysql區(qū)別的一些知識(shí)點(diǎn)分析
看書(shū)、看視頻的時(shí)候一直沒(méi)有搞懂mysqli和mysql到底有什么區(qū)別。于是今晚“谷歌”一番,整理一下。需要的朋友可以參考下。2011-08-08
MySQL慢查詢中的commit慢和binlog中慢事務(wù)的區(qū)別
這篇文章主要介紹了MySQL慢查詢中的commit慢和binlog中慢事務(wù)的差異,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
MySQL實(shí)現(xiàn)數(shù)據(jù)更新的示例詳解
這篇文章主要為大家詳細(xì)介紹了MySQL實(shí)現(xiàn)數(shù)據(jù)更新的相關(guān)資料,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
MySQL觸發(fā)器運(yùn)用于遷移和同步數(shù)據(jù)的實(shí)例教程
這篇文章主要介紹了MySQL觸發(fā)器運(yùn)用于遷移和同步數(shù)據(jù)的實(shí)例教程,分別是SQL Server數(shù)據(jù)遷移至MySQL以及同步備份數(shù)據(jù)表記錄的兩個(gè)例子,需要的朋友可以參考下2015-12-12
Mysql學(xué)習(xí)筆記之存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù)示例詳解
MySQL存儲(chǔ)過(guò)程是一種在MySQL數(shù)據(jù)庫(kù)中存儲(chǔ)的預(yù)編譯SQL代碼塊,它可以接受參數(shù)并執(zhí)行一系列SQL操作,這篇文章主要介紹了Mysql學(xué)習(xí)筆記之存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù)的相關(guān)資料,需要的朋友可以參考下2025-08-08
正則表達(dá)式(REGEXP)與通配符(LIKE)的超詳細(xì)對(duì)比
正則表達(dá)式和通配符有許多相似的地方,但它們作用、用法、格式有許多差別,這篇文章主要介紹了正則表達(dá)式(REGEXP)與通配符(LIKE)的超詳細(xì)對(duì)比,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-07-07
在IDEA的maven項(xiàng)目中連接并使用MySQL8.0的方法教程
這篇文章主要介紹了如何在IDEA的maven項(xiàng)目中連接并使用MySQL8.0,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02

