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