2014-07-11 2 views
-1

mysql이 할 수있는만큼 빨리 내 조건과 일치하는 테이블의 모든 행을 계산하고 싶습니다.
그래서 저는 4 개의 SQL을 가지고 있고 그것들 모두를 설명하기를 원합니다. 각각의 SQL은 어떻게 다른가요?
이며 쿼리 시간 및 서버 성능에 가장 빠르고 가장 좋습니다.
이거나 이보다 더 좋은 다른 방법이 있습니다. 고맙습니다.테이블 mysql의 모든 행을 계산하는 가장 좋은 방법이 있습니까?

select count(*) as total from table where my_condition 
select count(1) as total from table where my_condition 
select count(primary_key) as total from table where my_condition 

또는

모든
select * from table where my_condition 
//and then use mysql_num_rows() 
+0

처음 세 개 중 하나라도 동일한 성능을 제공하도록 MySQL을 최적화해야합니다. 마지막으로 매우 비효율적 인 이유는 MySQL이 모든 데이터를 반환하도록 준비해야하기 때문이다. –

+1

첫 번째 세 개는 모두 매우 비슷하다. 모든 데이터를 애플리케이션으로 다시 전달해야하므로 마지막 단계는 성능 악몽이 될 수 있습니다. –

답변

0

첫째도 마지막 하나를 수행에 대해 생각하지 않는다 ! 말 그대로 데이터베이스에있는 모든 데이터를 선택하여 클라이언트에게 반환하면 클라이언트가 해당 데이터를 계산합니다.

둘째, 열 이름으로 계산할 경우 count는 널 값을 반환하지 않는다는 것을 이해해야합니다. 예를 들어 다음과 같습니다. select count (column1) from table_name; column1이 null 인 행이 있으면 계산하지 않으므로주의하십시오.

select count (*), select count (1), select count (primary_key)가 모두 같으므로 아무런 차이가 없습니다.

+1

기술적으로 4 번째에 잘못되었습니다. mysql이 많은 불필요한 작업을하도록 강요하지만, fetch() 호출을 할 때까지 실제 행 데이터는 전송되지 않는다. 그렇다고해서 mysql이 서버의 일부 데이터를 버퍼링하지 않기 때문에 실제 가져 오기가 가능하고 임시 테이블과 기타 등등으로 복사 할 수 있습니다. 실제로 가져 오기 호출을 수행 할 때까지는 메타 데이터를 제외하고 클라이언트에 아무 것도 보내지 않습니다. –

+0

해명 해 주셔서 감사합니다. 좋은 정보. – Ali

관련 문제