Как быстро проверить контрольную сумму MySQL InnoDB таблицы с миллионами записей - PullRequest
1 голос
/ 10 января 2012

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

checksum table _table_name_

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

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

С уважением Felix

Ответы [ 2 ]

1 голос
/ 10 января 2012

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

SELECT MAX(LastUpdateTS)
FROM TableX

С MySQL Docs, Timestamp Properties:

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

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


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

0 голосов
/ 10 января 2012

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

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