Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- intellij
- 노드간 통신
- 7879
- RedirectService
- jar 배포
- LPOS
- 개발 어렵당.ㅠ
- Armeria
- hbase 저장공간 설정
- 애자일 싫타
- 티스토리챌린지
- jsonMarshaller
- Loki 로그
- formik
- Ingress Controller Fake
- 논블록킹 성능
- ㅉ때
- pinpoint 2.5.3
- 월급루팡 일지
- UnsupportedOperationException
- R2DBC Paging
- reids
- 핀포인트
- OIDC
- 오블완
- pinpoint
- fake jwt
- 플루터
- save/update
- nGinder
Archives
- Today
- Total
대머리개발자
모든 쿼리는 index를 타야 제맛이쥐 본문
728x90
SELECT id, action, regDt
FROM Product
WHERE action = 'EARN_TODO'
AND style = 'POINT'
AND regDt > DATE_SUB(CURDATE(), INTERVAL 7 DAY)
AND regDt < DATE_SUB(CURDATE(), INTERVAL 6 DAY)
VS
SELECT id, action, regDt
FROM Product
WHERE action = 'EARN_TODO'
AND style = 'POINT'
AND DATEDIFF(CURDATE(), regDt) = 7
EARN_TODO를 정확히 7일 후에 조건이 충족되면 EARN으로 UPDATE 해줘야 한다.
따라서 UPDATE할 대상을 조회하고자 할 때 어떤 쿼리가 더 효과적인지는..
일단 무조건 피해야할 조건은 컬럼의 함수나 연산을 좌측에 두면 안 된다.
⭐⭐인덱스가 타지 않는다.
그럼 이미 답이 나왔지유!
But!!! 애초에 데이터베이스 설계를 잘 했다면 더 깔끔해진다.
SELECT id, action, regDt
FROM Product
WHERE action = 'EARN_TODO'
AND style = 'POINT'
AND regDt = DATE_SUB(CURDATE(), INTERVAL 7 DAY)
날짜(regDt) 타입은 무조건! 그냥! dateTime으로 했는데..
필요하다면 단순 날짜형(date)으로 설정해도 되겠다.
더 깔끔하게 아예 별도 이용 가능 날짜의 컬럼을 파서!!!.. 등록할 때 관련 데이터도 넣는다..!!
SELECT id, action, regDt
FROM Product
WHERE action = 'EARN_TODO'
AND style = 'POINT'
AND availableDt = CURDATE()
데이터 설계를 잘하자!!
728x90
'개발이야기 > DataBase' 카테고리의 다른 글
어색한 쿼리. (0) | 2025.03.31 |
---|---|
성능 - 조건절 OR (0) | 2025.01.20 |
CROSS JOIN 언제 쓸까 했는데.. (1) | 2024.07.09 |
마이그레이션(MyBatis -> R2DBC) 언제나 즐겁네! (0) | 2024.07.08 |
group_concat 속 문자 정렬하기 (0) | 2024.05.31 |