[MariaDB] GROUP BY 최적화 0 2 1,029

by 내몸매GROUPBY [MySQL] [2019.05.10 09:39:11]


https://mariadb.com/kb/en/library/building-the-best-index-for-a-given-select/

위 URL에서 step 2b(GROUP BY) 섹션을 보고있습니다.

PROBLEM

WHERE aaa = 123 AND bbb = 1 GROUP BY ccc ⇒ INDEX(bbb, aaa, ccc) or INDEX(aaa, bbb, ccc) (='s first, in any order; then the GROUP BY)

QUESTION

GROUP BY를 한다는 것은 그룹핑을하고 집계를 사용하기 위함인데 제가 어떤 컬럼을 기준으로 그룹핑 하고싶은지도 모르면서 왜 ccc를 그룹핑 하는걸 가이드로 제시하는걸까요 전 도저히 이해가 가지 않네요ㅠ

 

PROBLEM

GROUP BY x,y ⇒ INDEX(x,y) (no WHERE)

QUESTION

인덱스가 x,y로 잡혀있고 GROUP BY x,y를 하고있습니다. 근데 no WHERE이라고 써있네요.

이거 WHERE절 사용하지 말라는거 맞죠? 왜 사용하지 말라고 했을까요?

가령 WHERE x = 1 GROUP BY x,y를 하는건 위 GROUP BY x,y보다 성능적으로 떨어지거나 불이익이 있을까요?

제가 생각하기론 WHERE x = 1은 인덱스로 빠르게 찾을거고, 읽어진 레코드들은 이미 x 컬럼을 기준으로 정렬되어 있는 상태일 것이고 GROUP BY를 실행할 때 차레대로 레코드를 읽으면서 집계만 하면 되므로 오히려 GROUP BY x,y 처럼 전체 레코드를 집계하는 것보다 더 빠를것 같은데 제가 잘못이해했나요?

 

by 마농 [2019.05.10 10:28:32]

1. 어떤 컬럼을 기준으로 그룹핑 하고싶은지도 모르면서 왜 ccc를 그룹핑 하는걸 가이드로 제시하는걸까요?
--> GROUP BY ccc 는 가이드가 아니라 가이드를 해야 할 문제 상황입니다.
--> 가이드는 그 옆에 나오는INDEX 부분이죠.
--> 즉, where 절과 group by 절이 좌측과 같을 경우 우측과 같은 인덱스가 필요하다.
2. no WHERE이라고 써있네요. 이거 WHERE절 사용하지 말라는거 맞죠? 왜 사용하지 말라고 했을까요?
--> where 를 쓰지 말라는게 아닙니다.
--> where 절이 없는 그룹바이의 경우를 의미하는 듯 합니다.
3. 전체적으로 보면
--> 구문을 작성하는 법을 알려주는게 아니라
--> 해당 구문이 주어졌을 때 적절한 인덱스가 필요하다는 것입니다.


by 내몸매GROUPBY [2019.05.10 10:48:41]

오옹오

결국 이런 구문이라면 이런식으로 인덱스를 추가해야된다라는 상황을 말해주는거군요

오오홓 소름돋았어요 감사합니다

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입