2012-01-10 4 views
1

의 수백만 신속하게 검사 MySQL의 InnoDB의 테이블 : 기록의 경우 수백만의 느린어떻게 내가 가진 체크섬을 수행 할 수 있습니다 이노 기반의 테이블이 기록

checksum table _table_name_ 

테이블에 상주합니다. 테이블이 변경되었는지 아닌지를 인식 할 수있는 방법이 있는지 궁금합니다.

요청하는 것이 빠르고 저렴하며 테이블의 레코드가 변경 될 때마다 변경됩니다. 나는 InnoDB 테이블을 찾을 수 없다. 거기 뭐 있니?

감사 펠릭스

MySQL의 상점

답변

0

이후 버전 테이블에 각 업데이트에 대한 타임 스탬프 :

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

너무 느려 보이고 NULL을 기대하지 않는 많은 테이블에서 NULL을 반환합니다. – GeorgieF

1

당신이 기본 설정으로 만든 테이블에 타임 스탬프 (말 LastUpdateTS)을하는 경우, 그 위에 색인을 붙이면, 이것은 오히려 빠르다.

SELECT MAX(LastUpdateTS) 
FROM TableX 

MySQL Docs, Timestamp Properties에서 :하십시오 CREATE TABLE 문에서

가 첫 번째 TIMESTAMP 열은 다음과 같은 방법으로 선언 될 수있다 :

을 그래도 삭제 만 삽입 및 업데이트를 잡을하지만하지 않습니다

DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 절을 모두 사용하면 열에는 기본값에 대한 현재 시간 소인이 자동으로 업데이트됩니다. 당신이 (삭제 포함) 테이블의 변화를 잡으려고합니다


은, 트리거는 최고의 솔루션이 될 수 있습니다. INSERT, UPDATE 또는 DELETE 문이 테이블에서 작동 할 때마다 트리거가 보조 테이블을 업데이트 할 수 있습니다.

+0

제안을위한 Thx입니다. DB의 부하가 심한 경우에는 3 개의 추가 트리거가 얼마나 많은 영향을 미치는지 알지 못합니다. 따라서 timestamp 열을 추가하고 테이블의 행 수를 포함하여 삭제 작업을 구현하기로 결정했습니다. 이것은 일부 마이그레이션을 의미하지만 최고의 장단점 인 것 같습니다. – GeorgieF