inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Real MySQL 시즌 1 - Part 1

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

해결된 질문

214

BEMELON

작성한 질문수 1

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(*) 는 제거 대상이라고 설명을 해주셨습니다. 책의 내용처럼 메타 정보에서 가져온다고 한다면 굳이 제거 대상이 될 것 같지는 않은데, 혹시 제가 놓친 배경이 있었을까요?

 

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

 

 

mysql dbms/rdbms backend query-tuning mysql-query

답변 2

0

이성욱

Bemelon님, 안녕하세요.

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

 

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

 

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

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

 

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

감사합니다.

0

인프런 AI 인턴

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

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

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

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

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

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

도움이 되었길 바랍니다!

Commit 응답받기 전 네트워크 문제가 발생하면

1

65

1

14분44초에 쿼리 질문드립니다.

0

73

2

ep12. (2) LEFT JOIN 사용 방법 준수 - 오타 질문

0

75

2

ep.12 count(*) 질문

0

67

2

레코드 수정시 저장공간이 부족하면

0

81

2

복합 index 문의

0

87

2

강의

0

83

1

LEFT JOIN 시 드라이빙 테이블을 왜 ALL로 읽나요?

0

108

2

GAP 락에 대한 질문 드립니닷..!

0

195

1

ORDER BY가 필요한 이유

0

177

2

[오타 제보] 선행 데이터를 기반으로 한 데이터 분석

0

167

1

2강. VARCHAR(255) 저장되는 데이터의 길이 정보 질문

0

449

2

LIMIT, OFFSET을 사용하는 것과 범위 기반 방식의 성능 차이

0

320

2

MySQL Where절 내 조건의 순서

0

395

2

1강. delete marking된 데이터의 정리 주기는 어느 정도인가요?

0

238

2

Mysql table avg_row_length

0

144

1

12강 FULL GROUP BY

0

135

2

ep11) Prepared Statement에서 질문

0

146

2

7)select for update 강의에서 질문

0

230

2

12강. LEFT JOIN 사용 방법 준수 5:42

0

240

2

6강. Top N 데이터 조회와 관련해 질문있습니다.

0

196

2

5강에서 사례로 언급하신 DETERMINISTIC 예제에 대해 질문있습니다.

0

146

1

deternmistic 질문

0

174

2

1강 CHAR타입에 대해 질문드립니다

0

230

1