[SQL] 빨리 mysql_num_rows도 () 또는 'SELECT COUNT ()'이다 - SQL & PHP?
SQL빨리 mysql_num_rows도 () 또는 'SELECT COUNT ()'이다 - SQL & PHP?
난 그냥 말 그대로 그냥 테이블의 행 수를 얻을 꿔 경우에 가장 효과가있는 방법 궁금하네요.
$res = mysql_query("SELECT count(*) as `number` FROM `table1`");
$count = mysql_fetch_result($res,0,'number');
또는
$res = mysql_query("SELECT `ID` FROM `table1`");
$count = mysql_num_rows($res);
누구나 여기에 대한 괜찮은 테스트를 수행?
해결법
-
==============================
1.그것을 반환하기 전에는 mysql_query ()는 PHP를 pcrocess로 MySQL의 모든 결과 레코드를 전송 (mysql_unbufferd_query 달리 ()). 혼자가 느린 mysql_num_rows도 () 버전을 만들 것입니다.
그것을 반환하기 전에는 mysql_query ()는 PHP를 pcrocess로 MySQL의 모든 결과 레코드를 전송 (mysql_unbufferd_query 달리 ()). 혼자가 느린 mysql_num_rows도 () 버전을 만들 것입니다.
또한 MySQL이 실제 데이터를 타격하지 않고 테이블의 인덱스에서 (*) 요청 횟수를 제공 할 수 있습니다 (의 MyISAM 같은) 일부 엔진. 하는 SELECT *이 전체 테이블 스캔 반면 결과에 foo에와 MySQL로부터 모든 단일 데이터 집합을 읽을 수있다.
-
==============================
2.더 후 2,300,000 행이 데이터베이스에 테스트 입력 : 이노, 1 지브 근처 크기, 사용 xhprof
더 후 2,300,000 행이 데이터베이스에 테스트 입력 : 이노, 1 지브 근처 크기, 사용 xhprof
TEST1 :
....SELECT COUNT(id) as cnt FROM $table_name....; row= mysqli_fetch_assoc($res2); echo $row['cnt']; //result1: 1,144,106 1,230,576 1,173,449 1,163,163 1,218,992
TEST2 :
....SELECT COUNT(*) as cnt FROM $table_name....; row= mysqli_fetch_assoc($res2); echo $row['cnt']; //result2: 1,120,253 1,118,243 1,118,852 1,092,419 1,081,316
TEST3 :
....SELECT * FROM $table_name....; echo mysqli_num_rows($res2); //result3: 7,212,476 6,530,615 7,014,546 7,169,629 7,295,878
테스트 4 :
....SELECT * FROM $table_name....; echo mysqli_num_rows($res2); //result4: 1,441,228 1,671,616 1,483,050 1,446,315 1,647,019
결론: 가장 빠른 방법은 TEST2에 있습니다 :
....SELECT COUNT(*) as cnt FROM $table_name....; row= mysqli_fetch_assoc($res2); echo $row['cnt'];
-
==============================
3.확실히 첫 번째. MySQL은 일반적으로 인덱스가 아닌 전체 테이블을보고하여이 작업을 수행 할 수 있습니다, 그리고 당신의 MyISAM (기본값)을 사용하는 경우, 테이블의 행 수는 테이블 메타 데이터에 저장되어 즉시 반환됩니다.
확실히 첫 번째. MySQL은 일반적으로 인덱스가 아닌 전체 테이블을보고하여이 작업을 수행 할 수 있습니다, 그리고 당신의 MyISAM (기본값)을 사용하는 경우, 테이블의 행 수는 테이블 메타 데이터에 저장되어 즉시 반환됩니다.
두 번째 방법은 전용 메모리에 전체 테이블을 읽을뿐만 아니라 클라이언트가 행을 계산하기 전에 네트워크를 통해 클라이언트로 전송하지 않습니다. 매우 낭비!
-
==============================
4.난 정말 시험이 필요하다 생각하지 않습니다.
난 정말 시험이 필요하다 생각하지 않습니다.
SQL 쿼리에 COUNT를하는
1) 하나의 데이터 행이를 다시 송신 클라이언트 (대신 모든 행의)
2) SQL이 수를 할 수 있습니다 당신을 위해 가능성이 항상있는을 것입니다 빠른 PHP보다합니다.
-
==============================
5.내가 더 빨리 될 것입니다 (1) 계산 같아요
내가 더 빨리 될 것입니다 (1) 계산 같아요
$res = mysql_query("SELECT count(1) as `number` FROM `table1`"); $count = mysql_fetch_result($res,0,'number');
제안 된 방법을 시도하지 않은 있지만, 첫 번째 차종 데이터베이스가 모든 레코드를 가져 와서 데이터베이스에 계산, 두 번째 차종 데이터베이스는 모든 레코드에 대해 별도의 필드를 가져오고 서버에서 결과의 수를 계산합니다. 엄지 손가락의 규칙 당신이 걸릴 것입니다 적은 시간 때문에 나는 업데이트 첫 번째 방법에 대한 투표 것 특정 레코드를 페치 적은 데이터로 (상수의 수를 가져온 모든 레코드에 대한 상수를 가져 와서 계산).
-
==============================
6.인덱스와 inodb로 카운트를 사용하면 너무 느린 그것을 만들지 만, mysqli_num_rows와 함께 사용할 때 어떤 지체없이 반환합니다. 당신은 부하에 두 번째의 일부를받지 않을 것 http://ssajalandhar.org/generalinstruction-0-1-0.html에서 mysqli_num_rows 결과를 확인할 수 있습니다. 나를 위해 mysqli 끝내 작동합니다.
인덱스와 inodb로 카운트를 사용하면 너무 느린 그것을 만들지 만, mysqli_num_rows와 함께 사용할 때 어떤 지체없이 반환합니다. 당신은 부하에 두 번째의 일부를받지 않을 것 http://ssajalandhar.org/generalinstruction-0-1-0.html에서 mysqli_num_rows 결과를 확인할 수 있습니다. 나를 위해 mysqli 끝내 작동합니다.
from https://stackoverflow.com/questions/2485224/sql-php-which-is-faster-mysql-num-rows-or-select-count by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] java.sql.Date로 변환 문자열 일 [중복] (0) | 2020.05.23 |
---|---|
[SQL] 어떻게 MySQL 데이터베이스에서 파일을 삽입하려면? (0) | 2020.05.23 |
[SQL] T-SQL에 중괄호 (0) | 2020.05.23 |
[SQL] SQL 서버에서 다른 저장 프로 시저 저장 프로 시저를 실행 (0) | 2020.05.23 |
[SQL] 포스트 그레스 오류 : 표현으로 사용되는 하위 쿼리에 의해 반환 된 둘 이상의 행 (0) | 2020.05.23 |