Мне назначили создать сценарий bash, который проверяет, приближается ли столбец AUTO_INCREMENT
к его пределу. Я решил, что лучший способ сделать это - получить «Текущее значение автоматического увеличения» и сравнить с «типом данных поддерживаемого столбца с максимальным значением» (скажем, 255 для tinyint
).Получить AUTO_INCREMENT без удара INFORMATION_SCHEMA
У нас есть около 2Tb данных в наших базах данных, я не хочу запрашивать таблицу INFORMATION SCHEMA
, чтобы получить AUTO_INCREMENT
, потому что это займет слишком много времени.
Поэтому я не могу использовать (SHOW TABLE STATUS LIKE 'table_name')
или (SELECT AUTO_INCREMENT FROM information_schema.tables)
, потому что оба запроса INFORMATION SCHEMA
стол.
Мне сказали, что может возникнуть обходной путь, чтобы получить текущий AUTO_INCREMENT, не попав в таблицу информационных схем, но я не вижу, как это сделать. Есть идеи?
Это, как я получаю от типа данных
DATA_TYPE="`$MYSQLCONNECT -D $DATABASE --batch -N -e "SELECT DATA_TYPE FROM
INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$DATABASE' AND TABLE_NAME='$TABLE' AND
EXTRA='auto_increment'"`"
Это, как я получить максимальное значение, колонка может работать:
MAX_VALUE="`$MYSQLCONNECT -D $DATABASE --batch -N -e "SELECT (CASE '$DATA_TYPE' WHEN 'tinyint'
THEN 255 WHEN 'smallint' THEN 65535 WHEN 'mediumint' THEN 16777215 WHEN 'int' THEN 4294967295
WHEN 'bigint' THEN 18446744073709551615 END >> IF(LOCATE('unsigned', COLUMN_TYPE) > 0, 0, 1))
as MAX_VALUE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$DATABASE' AND TABLE_NAME
= '$TABLE' AND EXTRA='auto_increment'"`"
@thinkswan может быть, вы можете помочь – andresg3