私はこのタスクの解決策を書きましたが、このようなことをしたのは私だけではありません。
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
そのクエリは、test
用にハードコーディングされています スキーマなので、独自のスキーマ用に編集する必要があります。
「私の主キーはオーバーフローしますか?」という質問に対する簡単な答え。 BIGINT UNSIGNED
に変更するだけです 今。それは文明が崩壊するまで確実に続くでしょう。
同じgitリポジトリに、すべてをチェックするための別の同様のスクリプトがあります。 主キーを自動インクリメントするだけでなく、整数列。ただし、他の列についてはそれほど問題にはなりません。