Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как быстро вычислить контрольную сумму таблицы MySQL InnoDB с миллионами записей

Автор вопроса: GeorgieFОтветов: 2

У меня есть таблицы на основе InnoDB, с которыми я могу проверить:

checksum table _table_name_

Это медленно, если в таблице находятся миллионы записей. Интересно, есть ли способ узнать, была ли таблица изменена или нет?

Мне нужно было что-то быстрое и дешевое в запросе, и меняющееся каждый раз, когда вносятся изменения в любую из записей таблицы. Я ничего не нахожу для таблиц InnoDB. Есть что-то?

С уважением Феликс

checksumdeltainnodb

Ответы

Ответ 1 · рейтинг 1 · ypercubeᵀᴹ

Если у вас есть метка времени (скажем, LastUpdateTS) в таблице, созданной с настройками по умолчанию, и индекс для нее, то это должно быть довольно быстро. Он будет ловить только вставки и обновления, но не удаления:

SELECT MAX(LastUpdateTS)
FROM TableX

Из MySQL Docs, Timestamp Properties:

В операторе CREATE TABLE первый столбец TIMESTAMP может быть объявлен любым из следующих способов:

С предложениями DEFAULT CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP столбец имеет текущую отметку времени для значения по умолчанию и автоматически обновляется.


Если вы хотите поймать любое изменение в таблице (включая удаления), триггер может быть лучшим решением. Каждый раз, когда оператор INSERT, UPDATE или DELETE действует на таблицу, триггер может обновить вспомогательную таблицу.

Ответ 2 · Niklas Lindblad

Более поздние версии MySQL сохраняют метку времени для каждого обновления таблицы:

SELECT UPDATE_TIME
FROM   information_schema.tables
WHERE  TABLE_SCHEMA = 'dbname'
   AND TABLE_NAME = 'tabname'

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы