게으른 개발자의 끄적거림

[DB] count(*), count(1)

끄적잉 2023. 8. 24. 23:10
반응형

 count(*)와 count(1)은 SQL에서 사용되는 두 가지 다른 방법으로 행의 수를 세는 것입니다. 그러나 두 방법 사이에는 중요한 차이점이 있습니다.

 

 

1. count(*):

  • count(*)는 테이블에서 모든 행을 세는 데 사용됩니다.
  • 이것은 모든 열을 검색하고 각 행의 존재 여부에 상관없이 행 수를 세므로 NULL 값이 포함된 행도 포함됩니다.
  • count(*)를 사용하면 테이블에 존재하는 모든 행의 수를 반환합니다.

SELECT count(*) FROM my_table;

 

 

2. count(1):

  • count(1)은 테이블에서 모든 행을 세는 다른 방법입니다.
  • 그러나 count(1)은 행의 내용을 실제로 검색하지 않고, 단순히 행의 존재 여부만 확인하기 때문에 성능상의 이점이 있을 수 있습니다.
  • 마찬가지로 NULL 값이 포함된 행도 포함됩니다.

SELECT count(1) FROM my_table;

 

 

주요 차이점:

  • count(*)는 열의 내용을 실제로 검색하기 때문에 열에 인덱스가 없다면 성능 저하가 발생할 수 있습니다. 하지만 count(1)은 인덱스 여부와 상관없이 효율적으로 작동합니다.
  • count(*)는 특정 열의 NULL 값을 포함한 행을 세지만, count(1)도 마찬가지로 NULL 값을 포함한 행을 세므로 결과에 차이가 없습니다.
  • 대부분의 데이터베이스 시스템에서는 count(*)과 count(1)의 성능 차이가 미미하거나 없으므로 어떤 것을 선택할지는 주로 코드 가독성과 개발자 선호도에 따라 결정됩니다.

일반적으로 성능상의 차이가 없는 경우, 가독성을 위해 count(*)를 사용하는 것이 권장됩니다.

 

반응형