Bagaimana untuk menukar SHOW INDEX kepada ALTER TABLE untuk menambah indeks dalam MySQL
P粉731861241
P粉731861241 2024-02-25 20:46:00
0
2
446

Saya melaksanakan SHOW INDEX di atas meja dan ini adalah output yang saya dapat:

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:

Berdasarkan maklumat ini, bagaimanakah anda membina pernyataan ALTER untuk menambah indeks pada jadual?

P粉731861241
P粉731861241

membalas semua(2)
P粉282627613

Saya telah mengembangkan jawapan hebat Bill di atas. Pilihan output telah dikembangkan untuk memasukkan TAMBAH KUNCI UTAMA, TAMBAH INDEKS UNIK atau TAMBAH 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 tidak mempunyai maklumat yang mencukupi. Anda boleh mencuba ini:

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;

Anda perlu mengisi skema dan nama jadual yang saya tinggalkan ruang letak ?, ?

Ini hanya untuk memulakan anda. Saya tahu ia tidak mempertimbangkan beberapa pilihan termasuk pengindeksan awalan, pengindeksan ungkapan atau anotasi. Saya akan meninggalkannya sebagai latihan kepada pembaca.

Ia juga menjana penyataan jadual ubah yang berasingan untuk setiap indeks. Jika anda ingin membuat jadual ubah yang menambah semua indeks, gunakan subkueri untuk menjana senarai lajur bagi setiap indeks, kemudian group_concat() untuk menggabungkannya dalam pertanyaan luar.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan