如何將SHOW INDEX轉換為ALTER TABLE以在MySQL中新增索引
P粉731861241
P粉731861241 2024-02-25 20:46:00
0
2
439

我在桌上執行了 SHOW INDEX ,這是我得到的輸出:

Table: logfile
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 759103
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:

根據這些信息,如何建立 ALTER 語句以向表添加索引?

P粉731861241
P粉731861241

全部回覆(2)
P粉282627613

我已經擴展了比爾上面的好答案。輸出選項已擴展為包括 ADD PRIMARY KEY、ADD UNIQUE INDEX 或 ADD INDEX

select concat('ALTER TABLE ', table_schema, '.', table_name, ' ADD ',
  if(index_name = 'PRIMARY', 'PRIMARY KEY ', if(non_unique, 'INDEX ', 'UNIQUE INDEX ')),
  if (index_name = 'PRIMARY','', index_name), ' (', group_concat('', column_name, '' order by seq_in_index), ');')
  as 'alter table statement'
from information_schema.statistics
where table_schema = ''
group by table_schema, table_name, index_name, non_unique
order by table_schema, table_name, non_unique asc
P粉268284930

SHOW INDEX 沒有足夠的資訊。你可以試試這個:

select concat('ALTER TABLE `', table_schema, '`.`', table_name, '` ADD ',
  if(non_unique, '', 'UNIQUE '), 'INDEX `', index_name, '` (',
  group_concat('`', column_name, '`' order by seq_in_index), ');') as _ddl
from information_schema.statistics
where (table_schema, table_name) = (?, ?)
group by table_schema, table_name, index_name, non_unique;

您需要填寫我留下佔位符 ?, ? 的架構和表名稱。

這只是為了讓您開始。我知道它不考慮一些選項,包括前綴索引、表達式索引或註解。我將把它當作練習留給讀者。

它也會為每個索引產生一個單獨的 alter table 語句。如果你想做一個alter table來新增所有索引,請使用子查詢為每個索引產生列列表,然後group_concat()將它們組合在外部查詢中。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板