테이블 행 수


165

테이블에서 레코드 수를 검색하는 MySQL 명령은 무엇입니까?

답변:


236
SELECT COUNT(*) FROM fooTable;

테이블의 행 수를 계산합니다.

참조 설명서를 참조하십시오 .


7
* 대신 색인 열 이름을 사용할 때 더 빠릅니까? 이와 같이 : SELECT COUNT (id) FROMtablename

1
약간만 ID를 사용하는 데 107 초가 걸렸을 때 그의 COUNT가 115 초에 쿼리 한 21961904 행 테이블이 있습니다.
Bondolin

2
COUNT (*)는 엄격한 언어 정의입니다. COUNT (*)를 기록하면 구문 분석 오류가 발생합니다.
ppostma1

9
당신은 할 수 있습니다 COUNT(1), 이것은 가장 빠른 방법입니다.
Shota Papiashvili

PHP에서 변수를 작성하기 위해 COUNT ()를 사용하는 가장 좋은 방법은 무엇입니까? SQL에서 "... COUNT (*) AS rowCount ..."를 수행합니까, $ results-> num_rows를 사용합니까, 아니면이 결과를 직접 호출 할 수 있습니까?
Nosajimiki

71

아무도 언급하지 않았기 때문에 :

show table status;

각 테이블의 예상 행을 포함하여 추가 정보와 함께 모든 테이블을 나열합니다. 이것이 phpMyAdmin이 데이터베이스 페이지에 사용하는 것입니다.

이 정보는 MySQL 4에서 사용할 수 있으며 아마도 MySQL 3.23에서도 오래 전 정보 스키마 데이터베이스 일 것입니다.

최신 정보:

다운 투표가 있었으므로 표시된 숫자가 InnoDB 및 TokuDB에 대해 추정되며 MyISAM 및 Aria (Maria) 스토리지 엔진에 절대적으로 정확 하다는 것을 분명히하고 싶습니다 .

문서 :

행 수 MyISAM과 같은 일부 스토리지 엔진은 정확한 수를 저장합니다. InnoDB와 같은 다른 스토리지 엔진의 경우이 값은 근사치이며 실제 값과 40 %에서 50 %까지 다를 수 있습니다. 이 경우 SELECT COUNT (*)를 사용하여 정확한 수를 얻으십시오.

다음과 같은 쿼리 때문에 MySQL에서 행 수를 보는 가장 빠른 방법이기도합니다.

select count(*) from table;

전체 테이블 스캔을 수행하면 대용량로드 서버에서 몇 시간이 걸릴 수있는 매우 비싼 작업이 될 수있는 작업을 검색 할 수 있습니다. 또한 디스크 I / O가 증가합니다.

동일한 작업으로 인해 삽입 및 업데이트 테이블이 차단 될 수 있습니다. 이는 이국적인 스토리지 엔진에서만 발생합니다.

InnoDB와 TokuDB는 테이블 잠금으로 정상이지만 전체 테이블 스캔이 필요합니다.


3
이것은 행을 계산하는 가장 효율적인 방법처럼 보입니다. 왜 대답이 아닌지 궁금합니다. InnoDB를 사용하고 있습니다. 테이블 잠금을 사용하면 행 수가 정확해야합니까?
Chung Lun Yuen

innodb의 경우 추정 됩니다. "웹 사이트에 xxx 회원이 있습니다", "귀하의 것과 비슷한 xxx 결과를 발견했습니다"등의 경우에 사용할 수 있습니다.
Nick

확실하지 않습니다. 그러나 Innodb는 실제 카운트가 아닙니다. 그러나 백만 행 테이블에는 매우 유용합니다.
Nick

4
행 수를 얻기 위해 각 행을 계산하기 위해 테이블을 살펴 보는 것은 다소 어리 석습니다. 그래서 나는이 대답을 선호합니다.
th3penguinwhisperer 2016 년

35

select해당 테이블 에서 쿼리를 실행하지 않고 테이블의 행 수를 찾는 다른 방법이 있습니다.

모든 MySQL 인스턴스에는 information_schema 데이터베이스가 있습니다. 다음 쿼리를 실행하면 해당 테이블의 대략적인 행 수를 포함하여 테이블에 대한 자세한 정보가 제공됩니다 .

select * from information_schema.TABLES where table_name = 'table_name'\G

MyISAM이 행 수를 저장하기 때문에 MyISAM 테이블에서도 이것이 더 빠릅니까?
NaturalBornCamper

나는 이것을 MyISAM에서 테스트하지 않았다.
Santhosh Tangudu



3

그냥

SELECT COUNT(*) FROM table;

그 후 Where로 조건을 지정할 수 있습니다

SELECT COUNT(*) FROM table WHERE eye_color='brown';

3

테이블에 여러 필드가 있고 테이블이 큰 경우 모든 필드를 메모리에로드하고 다음을 사용하면 성능이 향상되므로 사용하지 않는 * 것이 좋습니다

SELECT COUNT(1) FROM fooTable;

이것은 올바르지 않습니다. 참조 stackoverflow.com/questions/5179969/... 실제로 훨씬 느의 MyISAM하실 수 있습니다 COUNT (1).
jcoffland

@jcoffland 당신은 특히 조인이 있거나 조건이 count (*)보다 훨씬 빠를 때 혼자서 시도 할 수 있습니다.
Yuseferi

2

Santosh 에서 언급 했듯이이 쿼리는 모든 테이블을 쿼리하지는 않지만 적절하게 빠릅니다.

특정 데이터베이스 의 특정 테이블 이름 에 대해 데이터 레코드 수의 정수 결과를 리턴하려면 다음을 수행하십시오.

select TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA = 'database' 
AND table_name='tablename';

1
예상 행 수를 반환 할 수 있습니다. 한 예에서 COUNT (*)를 사용하여 55,940,343 행을 얻었지만이 방법을 사용하여 56,163,339를 사용하여 200k 이상 줄였습니다.
jcoffland

@ jcoffland, 나는 결과가 대략적인 _ Santosh_의 대답을 언급했습니다 . 내 대답은 더 자세한 실제 쿼리입니다. 그것의 당신이 정확한 카운트를 사용하려면 확실히 답변을 통해 취소 count(*)성능에 대한 인식과를
모하마드 카난

1
$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id;
$total = 0;
$sqls = mysql_query($sql,$conn);
if ( $sqls ) {
    $total = mysql_result($sqls, 0);
};
echo "Total:".$total;`

이 답변은 mysql_result는 PHP 5.5.0에서 더 이상 사용되지 및 PHP 7.0.0에서 제거되고, 오래된입니다
이 세상을 더 나은 곳으로 만들기

1

지정된 기준과 일치하는 행 수를 리턴하는 count ()를 사용해야합니다.

select count(*) from table_name;

0

기본 키 또는 고유 키 / 인덱스가있는 경우 더 빠른 방법 (4 백만 행 테이블로 테스트)

SHOW INDEXES FROM "database.tablename" WHERE Key_Name=\"PRIMARY\"

그런 다음 카디널리티 필드를 가져옵니다 (즉석에 가깝습니다)

0.4 초 ~ 0.0001ms의 시간

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.