一、為什么查詢information_schema下的TABLES這么慢
一般有兩個原因。1、是元數(shù)據(jù)太多,就比如你的例子總共七萬多張表,information_schema在統(tǒng)計時需要挨個去show table status,需要花費的時間較長。2、是參數(shù)innodb_stats_on_metadata設置為on的情況下,具體說明參考官方文檔,可以將其設置為off對比下效果。
優(yōu)化INFORMATION_SCHEMA查詢
嘗試在子句中使用數(shù)據(jù)庫和表名的常量查找值WHERE
您可以按如下方式利用此原則:
若要查找數(shù)據(jù)庫或表,請使用計算結(jié)果為常量的表達式,例如文本值、返回常量的函數(shù)或標量子查詢。避免使用非常量數(shù)據(jù)庫名稱查找值(或無查找值)的查詢,因為它們需要掃描數(shù)據(jù)目錄才能查找匹配的數(shù)據(jù)庫目錄名稱。在數(shù)據(jù)庫中,請避免使用非常量表名查找值(或無查找值)的查詢,因為它們需要掃描數(shù)據(jù)庫目錄才能查找匹配的表文件。此原則適用于下表中顯示的表,下表顯示了常量查找值使服務器能夠避免目錄掃描的列。例如,如果要從INFORMATION_SCHEMATABLES,在子句中使用常量查找值可以避免數(shù)據(jù)目錄掃描。
延伸閱讀:
二、數(shù)據(jù)庫和 SQL 概念
數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫,它的產(chǎn)生距今已有六十多年。隨著信息技術和市場的發(fā)展,數(shù)據(jù)庫變得無處不在:它在電子商務、銀行系統(tǒng)等眾多領域都被廣泛使用,且成為其系統(tǒng)的重要組成部分。
數(shù)據(jù)庫用于記錄數(shù)據(jù),使用數(shù)據(jù)庫記錄數(shù)據(jù)可以表現(xiàn)出各種數(shù)據(jù)間的聯(lián)系,也可以很方便地對所記錄的數(shù)據(jù)進行增、刪、改、查等操作。
結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱 SQL,是上世紀 70 年代由 IBM 公司開發(fā),用于對數(shù)據(jù)庫進行操作的語言。更詳細地說,SQL 是一種數(shù)據(jù)庫查詢和程序設計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關系數(shù)據(jù)庫系統(tǒng),同時也是數(shù)據(jù)庫腳本文件的擴展名。