pphmyadmin 결과에서 예상 행 수가 매우 다른 이유는 무엇입니까?
데이터베이스를 변경하지 않고 테이블에 매우 다른 행 수를 기록했습니다.
원인은 무엇입니까?


Server version: 5.1.63-cll
Engine: InnoDB
My ISAM 테이블과 달리 InnoDB 테이블은 테이블에 포함된 행 수를 추적하지 않습니다.
이 때문에 InnoDB 테이블의 정확한 행 수를 알 수 있는 유일한 방법은 테이블의 각 행을 검사하고 카운트를 누적하는 것입니다.따라서, 큰 InnoDB 테이블에서, a를 수행합니다.SELECT COUNT(*) FROM innodb_table쿼리는 행 수를 얻기 위해 전체 테이블 스캔을 수행하기 때문에 매우 느릴 수 있습니다.
phpMyAdmin은 다음과 같은 쿼리를 사용합니다.SHOW TABLE STATUS엔진(InnoDB)에서 테이블의 행 수에 대한 예상 카운트를 가져옵니다.단순한 추정치이기 때문에 부를 때마다 변동이 심하고 변동 폭이 상당히 클 때도 있고 근접할 때도 있습니다.
Percona의 InnoDB 테이블에 대한 COUNT(*)에 대한 유익한 블로그 게시물입니다.
SHOW TABLE STATUS에 대한 MySQL 매뉴얼 페이지에는 다음과 같은 내용이 있습니다.
행 수입니다.MyISAM과 같은 일부 스토리지 엔진은 정확한 개수를 저장합니다.InnoDB와 같은 다른 스토리지 엔진의 경우 이 값은 근사치이며 실제 값과 최대 40~50% 차이가 날 수 있습니다.이러한 경우 SELECT COUNT(*)를 사용하여 정확한 카운트를 구합니다.
InnoDB 제한사항에 대한 페이지는 다음과 같이 더 자세히 설명합니다.
SHOW TABLE STATUS는 테이블에 예약된 물리적 크기를 제외하고 InnoDB 테이블에 정확한 통계를 제공하지 않습니다.행 수는 SQL 최적화에 사용되는 대략적인 추정치일 뿐입니다.
InnoDB는 동시 트랜잭션이 동시에 서로 다른 수의 행을 "볼" 수 있기 때문에 테이블의 내부 행 수를 유지하지 않습니다.처리하는 방법
SELECT COUNT(*) FROM tstatement, InnoDB는 테이블의 인덱스를 검색합니다. 인덱스가 완전히 버퍼 풀에 있지 않으면 시간이 걸립니다.테이블이 자주 변경되지 않는 경우 MySQL 쿼리 캐시를 사용하는 것이 좋은 해결책입니다.빠른 카운트를 얻으려면 직접 작성한 카운터 테이블을 사용하고 응용 프로그램이 삽입 및 삭제에 따라 업데이트하도록 해야 합니다.대략적인 행 수가 충분하다면,SHOW TABLE STATUS사용할 수 있습니다.섹션 14.3.14.1 "InnoDB Performance Tuning Tips"를 참조합니다.
phpMyAdmin은 빠른 메서드를 사용하여 행 개수를 가져오며, 이 메서드는 InnoDB 테이블의 경우에만 대략적인 개수를 반환합니다.
결과를 수정할 방법은 을 참조하십시오. 하지만 이는 성능에 심각한 영향을 미칠 수 있습니다.
기본 키 INTUNSIGNED AUTO_INCREMPATION을 열로 지정합니다.그런 다음 실제 행 수를 표시하기 시작했습니다.
언급URL : https://stackoverflow.com/questions/11926259/why-is-the-estimated-rows-count-very-different-in-phpmyadmin-results
'programing' 카테고리의 다른 글
| 인라인 블록 요소가 라인의 나머지 부분을 채우도록 하는 방법은? (0) | 2023.10.16 |
|---|---|
| 워드프레스 관리 영역에서 메뉴 항목 레이블을 변경하시겠습니까? (0) | 2023.10.16 |
| PowerShell에 터미네이터가 없습니다. " (0) | 2023.10.16 |
| 자바스크립트:바이트 배열의 새 탭에서 PDF 열기 (0) | 2023.10.16 |
| 파이썬 데코레이터에게 추가 인수를 전달하려면 어떻게 해야 합니까? (0) | 2023.10.16 |