Saya menulis solusi untuk tugas ini, tetapi saya bukanlah satu-satunya orang yang melakukan hal seperti ini.
select concat('`', table_schema, '`.`', table_name, '`.`', column_name, '`') as `column`,
auto_increment as `current_int`, max_int, round((auto_increment/max_int)*100, 2) as `pct_max`
from (select table_schema, table_name, column_name, auto_increment,
pow(2, case data_type
when 'tinyint' then 7
when 'smallint' then 15
when 'mediumint' then 23
when 'int' then 31
when 'bigint' then 63
end+(column_type like '% unsigned'))-1 as max_int
from information_schema.tables t
join information_schema.columns c using (table_schema,table_name)
join information_schema.key_column_usage k using (table_schema,table_name,column_name)
where t.table_schema in ('test')
and k.constraint_name = 'PRIMARY'
and k.ordinal_position = 1
and t.auto_increment is not null
) as dt;
https://github.com/billkarwin/bk -tools/blob/master/pk-full-ratio.sql
Kueri itu di-hard-code untuk test
skema, jadi Anda perlu mengeditnya untuk skema Anda sendiri.
Jawaban singkat untuk pertanyaan "apakah kunci utama saya akan meluap?" adalah hanya mengubahnya menjadi BIGINT UNSIGNED
sekarang. Itu pasti akan bertahan sampai runtuhnya peradaban.
Di git repo yang sama, saya memiliki skrip serupa lainnya untuk memeriksa semua kolom integer, bukan hanya kunci utama kenaikan otomatis. Tapi itu tidak terlalu menjadi perhatian untuk kolom lain.