Jeg skrev en løsning til denne opgave, men jeg er næppe den eneste person, der har gjort noget som dette.
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
Denne forespørgsel er hårdkodet til test
skema, så du skal redigere det til dit eget skema.
Det korte svar på spørgsmålet "kommer min primære nøgle til at flyde over?" er bare at ændre det til BIGINT UNSIGNED
nu. Det vil helt sikkert vare indtil civilisationens sammenbrud.
I den samme git-repo har jeg et andet lignende script til at kontrollere alle heltalskolonner, ikke kun auto-increment primære nøgler. Men det er ikke så meget bekymrende for andre spalter.