mysql information_schema 常用命令


information_schema 是MySql 信息數據庫。

其中保存着關於MySQL服務器所維護的所有其他數據庫的信息。如數據庫名,數據庫的表,表欄的數據類型與訪問權限等。在INFORMATION_SCHEMA中,有數個只讀表。它們實際上是視圖,而不是基本表,因此,你將無法看到與之相關的任何文件。

有些時候用於表述該信息的其他術語包括“數據詞典”和“系統目錄”。

關於information_schema 的講解網上很多資料  也很全面   這里我們介紹下最常用的相關信息查詢:

1.SCHEMATA 

SELECT *FROM information_schema.SCHEMATA s;   -- 數據庫信息,主要了解mysql中有哪些數據庫。

 

 2.TABLES

SELECT *FROM information_schema.TABLES t WHERE t.TABLE_SCHEMA = '數據庫名';  --數據庫中表信息

 

 這個表能干嘛呢?簡潔:表明,表中行數,表存數據大小。

SELECT TABLE_NAME ,TABLE_ROWS ,DATA_LENGTH+INDEX_LENGTH ,concat(round((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2), 'MB') as data
FROM information_schema.tables WHERE TABLE_SCHEMA='庫名' ORDER BY DATA_LENGTH+INDEX_LENGTH desc; 

 

 3.STATISTICS  提供了關於表索引的信息。是show index from schemaname.tablename的結果取之此表

 

 SELECT s.INDEX_NAME,s.COLUMN_NAME,s.INDEX_TYPE,s.CARDINALITY FROM information_schema.STATISTICS s WHERE s.TABLE_NAME = '表名' AND s.TABLE_SCHEMA = '庫名';

 

 

關鍵在於這列:CARDINALITY  這個干嘛用的呢?

表示所以中不重復記錄的預估值,需要注意的是Cardinality是一個預估值,而不是一個准確值基本上用戶也不可能得到一個准確的值,在實際應用中,Cardinality/n_row_in_table應盡可能的接近1,如果非常小,那用戶需要考慮是否還有必要創建這個索引。故在訪問高選擇性屬性的字段並從表中取出很少一部分數據時,對於字段添加B+樹索引是非常有必要的。

建立索引的前提是高選擇性。這對數據庫來說才具有實際意義,那么數據庫是怎樣統計Cardinality的信息呢?因為MySQL數據庫中有各種不同的存儲引擎,而每種存儲引擎對於B+樹索引的實現又各不相同。所以對Cardinality統計時放在存儲引擎層進行的

在生成環境中,索引的更新操作可能非常頻繁。如果每次索引在發生操作時就對其進行Cardinality統計,那么將會對數據庫帶來很大的負擔。另外需要考慮的是,如果一張表的數據非常大,如一張表有50G的數據,那么統計一次Cardinality信息所需要的時間可能非常長。這樣的環境下,是不能接受的。因此,數據庫對於Cardinality信息的統計都是通過采樣的方法完成

 

索引的建立對數據庫的影響非常之大,不信你可以跑個千萬級的數據表試試,一個索引,2,3,4 相差的不是一點點  簡直是指數倍的增長,合理的使用索引可以提高性能,濫用就是降低性能的表現。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM