Jag skrev en lösning för denna uppgift, men jag är knappast den enda som har gjort något liknande.
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
Den frågan är hårdkodad för test
schema, så du måste redigera det för ditt eget schema.
Det korta svaret på frågan "kommer min primära nyckel att svämma över?" är att bara ändra det till BIGINT UNSIGNED
nu. Det kommer säkerligen att hålla tills civilisationens kollaps.
I samma git-repo har jag ett annat liknande skript att kontrollera alla heltalskolumner, inte bara primärnycklar med automatisk ökning. Men det är inte lika bekymmersamt för andra kolumner.