인프런 커뮤니티 질문&답변

BEMELON님의 프로필 이미지
BEMELON

작성한 질문수

Real MySQL 시즌 1 - Part 1

조건 없는 COUNT(*)에 대한 궁금증

해결된 질문

작성

·

130

0

안녕하세요, 강의 잘 듣고 있습니다.

 

강의와 책을 동시에 보면서, 학습을 하고 있습니다. 근데 강의와 도서에서 설명하는 내용에 다른점이 있는 것 같아서 질문드립니다.

 

REAL MySQL 8.0 (2권) 중 11.4.6 COUNT() 절에서는 아래와 같이 설명되어 있습니다.

MyISAM 스토리지 엔진을 사용하는 테이블은 항상 테이블의 메타 정보에 전체 레코드 건수를 관리한

다. 그래서 "SELECT COUNT(*) FROM tb_table"과 같이 WHERE 조건이 없는 COUNT(*) 쿼리는 MySQL 서버가 실제 레코드 건수를 세어 보지 않아도 바로 결과를 반환할 수 있기 때문에 빠르게 처리된다.

하지만, 강의 Ep.03 COUNT(*) vs COUNT(DISTINCT) 튜닝 에서는 WHERE 절 없는 COUNT(*) 는 제거 대상이라고 설명을 해주셨습니다. 책의 내용처럼 메타 정보에서 가져온다고 한다면 굳이 제거 대상이 될 것 같지는 않은데, 혹시 제가 놓친 배경이 있었을까요?

 

아니면 이게 뭔가 이분법적인 차원에서 접근하기에는 어려운 내용일까요?

 

 

답변 2

0

이성욱님의 프로필 이미지
이성욱
지식공유자

Bemelon님, 안녕하세요.

인프런 질의 응답 시스템이 문제인지, 질문을 놓치는 경우가 많네요. 2~3일에 한번씩 질문 답변을 달고 있는데... 요 질문은 놓치고 있었네요.

 

Real MySQL 8.0 2권의 내용을 다시 확인해시면, 말씀하신 부분은 "MyISAM" 테이블에 대한 부분이었다는 것을 확인하실 수 있을거에요. 그 문장 뒤에 이어서 나오는 문장을 보시면 "InnoDB"에서는 레코드 카운트가 필요하다는 이야기가 보이실 거에요.

 

그리고, 동영상 강의에서는 InnoDB를 기본으로 설명드린 것이어서, 조금 혼란을 드린 듯 합니다.

최신 MySQL 서버에서는 MyISAM 스토리지 엔진이 거의 사용되지 않고, InnoDB 스토리지 엔진이 대부분이어서... 동영상 강의에서는 InnoDB 스토리지 엔진을 기본으로 설명이 되고 있다고 보시면 될듯 합니다.

 

다시 한번 늦어진 답변 죄송합니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

님께서 제기하신 궁금증에 대해 말씀드리겠습니다.

MySQL의 COUNT(*) 사용에 있어서 MyISAM 스토리지 엔진은 실제로 테이블의 메타 데이터를 활용하여 전체 레코드 건수를 빠르게 반환할 수 있는 기능을 가지고 있습니다. 따라서, SELECT COUNT(*) FROM tb_table 같은 쿼리는 MyISAM을 사용할 경우 빠르게 결과를 얻을 수 있다는 점은 매우 유용합니다.

그러나, 강의에서 WHERE 절 없는 COUNT(*)을 제거 대상으로 언급한 부분은 다른 맥락에서의 최적화 방안을 설명한 것일 수 있습니다. 예를 들어, 다른 스토리지 엔진을 사용하는 경우, 특히 InnoDB 같은 경우에는 MyISAM과 같은 방식으로 메타 정보를 바로 활용해 레코드 건수를 파악하지 않기 때문에 COUNT(*) 쿼리의 성능이 달라질 수 있습니다. 또한, 특정 상황에서는 COUNT(*)의 사용이 본질적으로 필요하지 않거나 다른 방법으로 요구되는 정보를 더 효율적으로 얻을 수 있는 방법이 있을 수 있습니다.

이는 책과 강의가 다루는 맥락과 상황, 사용하는 스토리지 엔진의 차이에서 오는 논의 포인트의 차이로 볼 수 있습니다. 실제 적용 시에는 사용하는 MySQL 버전, 스토리지 엔진, 쿼리의 목적 및 사용 환경 등을 종합적으로 고려하여 최적의 방안을 선택해야 합니다.

특정 스토리지 엔진의 특성을 활용하는 경우가 있으나, 보편적인 최적화 원칙이나 다른 스토리지 엔진 사용 시 고려해야 할 사항 등을 강의에서 언급한 것으로 보입니다. 양쪽 모두의 맥락을 이해하고 상황에 맞게 적용하는 것이 중요합니다.

도움이 되었길 바랍니다!

BEMELON님의 프로필 이미지
BEMELON

작성한 질문수

질문하기