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