[일반] 자기전에 간단한 쿼리 문제 던지고 감
딘퐁(film1341)
2026-03-09 00:00
추천 3
댓글 37
다른 게시글
-
회원들 관련 배치 작업 돌릴때 [3][일반] 익명(175.114) | 03.08추천 0
-
역시 프리랜싱 오퍼 보낼 때 자신감이 중요한거 같다 [2][일반] 포치포치타..(preheat0897) | 03.08추천 0
-
취준생이 리액트 공부하는건 너무 사치인가 [4][일반] 익명(221.149) | 03.08추천 0
-
클린코딩이나 객체지향책이랑 [7][일반] 익명(222.112) | 03.08추천 0
-
클로드 300달러짜리 결제했는데 생각보다 다 쓰기 어렵네 [5][일반] 익명(121.162) | 03.08추천 0
-
2학년 운영체제 책 하나 추천점 [5][일반] 익명(118.34) | 03.08추천 0
-
근데 개인프로젝트할때 db설계 빡빡하게 하거해야함? [9][일반] 익명(222.112) | 03.08추천 0
-
코테 [1][일반] 익명(39.116) | 03.08추천 0
-
나 왜 코테 치룰때마다 살이 빠질까 [7][일반] Java(jobumstead) | 03.08추천 0
-
지원공고 없는 회사 면접 가야됨? [8][질문] 기무태현(222.237) | 03.08추천 0
지금 웹풀스택 ㄱ비가도되냐
안돼임마 - dc App
그럼 진짜 뭐하지 불안해뒤질거같다
복합인덱스로 가져가는게 가장 좋을거같긴 한데 저 기간별로 하면 1년치 오더가 너무 많이 잡혀서 데이터 휴리스틱하게 생각하면 취소건이 적을거같아서 일단 취소된애 재끼고 거기에서 일자별로 찾게하기
취소된거 재끼면 안됨 is not null 추가햇어 - dc App
주문 범위세팅하고 주문 취소순 정렬 조회임 - dc App - dc App
1년치 뽑고 취소순 정렬인디 mySql기준 null이 위에부터 박힌다는데 높은확률로 null인애들 10개가 뜨는 쿼리인거고 저렇게 소팅하면 cancel at에 null 아닌애들 10개뽑는거면 일단 cancel at not null인애들 기간순으로 먼저 뽑고(취소건 먼저 찾기) 거기에서 기간 맞는애로 추출하기 생각했는데
100만건중에 취소 1만건 걍주문 99만건이면 저 쿼리 결과 결국에 기간내에 있는 주문중에 취소 안된애 10건 나오는거 맞음?? 순서 소팅이라 캔슬 null이 위로박혀서 님 쿼리가 그렇다는디요?
@백갤러2(14.4) 문제 상황상 취소건 비율이 많다고 할게 그러면 not null 제외해도 여전히 많음 - dc App
@백갤러2(14.4) 아니지 취소된 애들이 10건 나오지 - dc App
@백갤러2(14.4) 취소 비율이 20프로라고 생각해보셈 - dc App
@백갤러2(14.4) 처음엔 잘못냄 not null 필수 - dc App
Deleted at 같은거 인덱스에 넣/말 결정할 때 그걸로 줄여도 별로 안줄어서 안넣는다 판단을 자주하긴 했는데 취소건 찾는데 취소가 99만 안취소가 1만이면 음 모르겠음
취소 20퍼면 취소건만 찾으면서 찾는 시점에 취소일로 소팅한번 걸어주고 그다음에 거기에서 이제 주문 기간으로 자를듯 10개만
@백갤러2(14.4) 한국말로 하니깐 뭘하려는건지 모르겟다 전체 20프로를 다 읽고 정렬한다는거임? - dc App
인덱스 추가가 안되면 그거밖에 생각 안남…
@백갤러2(14.4) 그럼 오답임 1000만건이면 200만개를 읽어야해서 - dc App
아니면 오더랑 캔슬이 어느정도 상관관계가 있으니까 캔슬을 저 기간으로 해서 찾는다? 근데 이건 엣지케이스 나올듯
@백갤러2(14.4) 거의 다 나옴 - dc App
@딘퐁 난 여기까지 출근준비 드르렁 드가자~
잘모르는데 오더데이트로 조건내의 주문 다 가져오고 거기서 또 캔슬데이트로 추가 정렬하고 10개골라서 느린거아님? 조건의 주문은 ㅈㄴ 많은데 취소한거 적으면 비효율이자나 (cancle, order) 로 인덱스하면 안되나
해당 인덱스 추가는 답이 아닙니다 - dc App
이유는 맞음?
@백갤러3(222.112) 넵 - dc App
(order_date, cancel_at)로 걸면 되나 - dc App
빨라지긴 하겠지만 이미 (order_date)가 있어서 좋은 추가는 아닙니다. - dc App
@딘퐁 진짜 뭐지... 이거랑 윗댓들 내용 정도 말고는 안떠오르는데 - dc App
@딘퐁 설마 싶긴 한데 where cancel_at >= '2025-03-08' and cancel_at < '2026-03-09' 이렇게 해야 되나 - dc App
@폭주린 끝 범위만 없애면 정답 - dc App
원인) 인덱스를 order_date로 탈 경우 1년치 데이터를 전부 조회후 sorting 하기 때문에 비효율적이고, cancel_at 기준으로 조회시에는 cancel_at 데이터가 오름차순 기준이라 과거4년치에 몰릴 확률이 큼(즉 4년치 최소분을 다 조회하고 10건 조회) 해결안 1) order_date, cancel_at 기준으로 인덱스 생성 후 '인덱스 만으로' order_date기준 1년치, cancel_at 정렬으로 10건 조회 후 전체 칼럼 데이터는 최후에 가져오기 해결안 2) order_date 기준 년단위 파티셔닝, cancel_at를 로컬 인덱스로 설정. 년단위 파티셔닝할 시 25년 기준 10건, 26년 기준 10건 조회해오고 20건을 다시 정렬하여 최후에 10건만 꺼내면 됨
아 아니다 cancle_dt이 order_date 이후라는 조건을 달아주면 되지
@밀우 어? 두번째 답글에 거의 다 왔네 - dc App
@딘퐁 cancel_at이 order_date 이후라는 조건 추가시에 cancle_at 이 2025-03-08 이후라는 조건이 추가되니깐 거기서부터 cancle_at 인덱스 기준으로 옵티마이저가 알아서 top-n 안해주나? order_date가 2025-03-08보다 과거인 데이터는 제외하면서..
@밀우 거의 왔는데 그냥 cancel_at >= 2025-03-08 추가하고 cancel_at으로 인덱스 타면됨 - dc App
@밀우 실제로 자주 나오는 슬로우쿼리 가져온거임 - dc App
서브쿼리해서 두번 조회하면 되는거 아님? 서브쿼리 하거나 오더 테이블에 오더 테이블 조인시키면 되겟네