Mysql

查詢以檢索所有表中特定列的索引詳細資訊

  • January 15, 2022

大多數表中都有一列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_KEYwith values PRIUNIMUL

有關表索引的詳細視圖,請針對第一個查詢返回的表執行以下查詢。 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;

引用自:https://dba.stackexchange.com/questions/141293