Mysql
查詢以檢索所有表中特定列的索引詳細資訊
大多數表中都有一列
created_at
。如果該欄位存在於表中並且未編入索引,我想獲取詳細資訊。
有什麼可以用 information_schema 做的來檢查這個嗎?
我正在使用 MySQL 5.6
要檢查列屬性,您可以執行查詢
SELECT * FROM information_schema.columns WHERE table_schema = 'your_schema_name' AND COLUMN_NAME = 'created_at';
這將列出架構中的所有表以及 created_at 列。在這裡,您可以檢查一些列屬性,包括
COLUMN_KEY
with valuesPRI
、UNI
、MUL
。有關表索引的詳細視圖,請針對第一個查詢返回的表執行以下查詢。
SHOW CREATE TABLE table_name;
您需要檢查以下其中一項:
範例 #1
- 你有一張桌子叫
mydb.mytable
- 您有一個名為
mycolumn
- 你想知道是否
mycolumn
被索引查詢 #1
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE table_schema='mydb' AND table_name='mytable' AND column_name='mycolumn';
查詢 #2
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema='mydb' AND table_name='mytable' AND column_name='mycolumn';
範例 #2
- 你想知道是否
mycolumn
被索引- 您不知道哪個表在該列上有索引
查詢 #1
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE column_name='mycolumn';
查詢 #2
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE column_name='mycolumn';
範例#3
您想知道哪個表有一個名為
mycolumn
但未在任何地方編制索引的列SELECT A.table_schema,A.table_name FROM ( SELECT table_schema,table_name FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE column_name='mycolumn' ) A LEFT JOIN ( SELECT DISTINCT table_schema,table_name FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE column_name='mycolumn' ) B USING (table_schema,table_name) WHERE B.table_schema IS NULL;