2009-08-09 3 views

답변

11

phpMyAdmin을 당신의 테이블에 대한 정보를 얻을 수 SHOW TABLE STATUS를 사용하면 phpMyAdmin에서왔다. documentation에서

:

행의 수입니다. MyISAM과 같은 일부 스토리지 엔진은 정확한 개수를 저장합니다. InnoDB와 같은 다른 스토리지 엔진의 경우이 값은 근사치이며 실제 값과 40 ~ 50 % 정도 다를 수 있습니다. 그러한 경우 정확한 카운트를 얻으려면 SELECT COUNT (*)를 사용하십시오.

이는 InnoDB가 ACID 호환 스토리지 엔진으로 인해 발생합니다. InnoDB는 행 레벨 locking을 사용하여 MVCC을 구현합니다. 즉, 주어진 시간에 주어진 행의 사본이 여러 개있을 수 있습니다. 나는이 기사를 읽기를 제안한다 : Understanding InnoDB MVCC.

4

InnoDB는 트랜잭션 스토리지 엔진이기 때문에 정확한 카운트는 해석의 대상이됩니다. 예를 들어, 일부 행은 스토리지에 존재할 수 있지만 해당 행을 작성한 트랜잭션은 아직 확약되지 않았습니다. 따라서 행은 개수에 포함되지 않아야합니다.

트랜잭션이 REPEATABLE READ 격리 수준 일 수 있습니다. 이는 트랜잭션이 시작된 전에 이 커밋 된 행만 볼 수 있음을 의미합니다. 일부 행은 커미트 될 수 있지만 최근에는 반복 가능한 읽기 트랜잭션의 시작보다 커밋 될 수 있습니다. 따라서 해당 행은 개수에 포함되지 않아야합니다. 그러나 동일한 행은 나중에 시작된 다른 트랜잭션에 의해 수행 된 카운트에 포함되거나 READ COMMITTED 격리 수준에 포함됩니다.

이 때문에 InnoDB에 대한이 테이블 통계는 근사치 일 수 있습니다. 정확한 수를 계산하려면 저장된 행을 모두 스캔하여 트랜잭션에 표시되는지 확인해야합니다.