목록SQL (5)
평범한 곰젤리
인덱스는 검색 속도를 높이기 위한 자료구조로,WHERE / JOIN / ORDER BY에 사용되는 컬럼에 생성한다. 조건으로 자주 조회되지만 값의 중복이 적은 컬럼에 인덱스를 적용한다. 인덱스 생성기본 문법: CREATE INDEX 인덱스_이름 ON 테이블_이름 (컬럼1, 컬럼2, ...);예 시: CREATE INDEX idx_orders_user ON orders (user_id);쿼리 실행 시SELECT * FROM orders WHERE user_id = 100;결과인덱스를 통해 user_id = 100 위치 바로 탐색필요한 행만 읽음(풀스캔 안함)성능 대폭 개선 🚀인덱스가 안타는 경우❌ 함수 사용SELECT *FROM ordersWHERE YEAR(order_date) = 202..
🧩 실무 시나리오 예제 2 “최근 7일간 재구매율이 높은 고객 찾기” 📌 상황 “최근 7일 안에 주문을 2번 이상 한 고객 목록을 뽑아주세요.” 📂 테이블 구조 users ( user_id INT, signup_date DATE ) orders ( order_id INT, user_id INT, order_date DATETIME, status VARCHAR ) 📌 유효 주문 조건 status = 'COMPLETED' *구매한 사람을 COMPLETED라고 상태가 바뀜 #내가 생각한 쿼리 select u.user_id from users u join orders o on u.user_id = o.user_id where order_date >= t..
📌 상황 쇼핑몰 데이터베이스가 있고, 기획팀에서 이런 요청이 왔어요. “2024년 12월에 매출이 가장 높은 상품 TOP 3를 알려주세요.” 📂 테이블 구조 orders ( order_id INT, user_id INT, order_date DATE ) order_items ( order_id INT, product_id INT, price INT, quantity INT ) 📌 매출 = price * quantity #내가 생각한 쿼리 SELECT oi.product_id,SUM(oi.price * oi.quantity) AS total_sales FROM order_items oi JOIN orders o ON o..
슈퍼키 : 어떤 속성끼리 묶던 중복값이 안나오고 서로 구별만 할 수 있으면 된다. 학번+주민번호 이름+나이 주민번호 + 이름기본키 : 테이블에서 기본키는 오직 1개만 지정할 수 있다. NULL 안됌외래키 : 참조될 테이블에서 기본키로 설정되어 있어야한다. 그래서 참조하는 테이블에서 기본키를 외래키라고 부른다.JOIN 걸때, 외래키 찾아서 ON으로 걸어줘야돼외래키 참조 무결성은 데이터베이스에서 두 테이블 간의 관계가 깨지지 않도록 보장하는 제약 조건으로, 자식 테이블의 외래키(Foreign Key) 값은 부모 테이블의 기본키(Primary Key) 값과 일치하거나 NULL이어야 한다는 규칙을 의미합니다. 이는 참조할 수 없는 데이터가 존재하지 않게 하여 데이터의 일관성과 정확성을 유지하는 핵심적인 역할을..
대규모 유지보수 업체에 입사해서 업무 중 신기했던 경험들을 나열하면서 공부를 해볼려고 한다.1. 풀스캔 극혐(그냥 발작버튼임)“계산은 쓸 때 한 번,조회는 읽기만 하게 만들어라”처음에 들어가서 쿼리 짜보라고해서 만들어서 보여주면 풀스캔된다고 치를 떤다.풀스캔이 왜요? 왜그렇게 싫어해요? -> 궁금하면 해보라고해서 해보면 납득함 (끄덕) ㅈㄴ 오래걸림하지만 알고 있다고 해서 쿼리짤때 정신차리고 안하면 풀스캔 써버리는 쿼리가 잘나옴 ㅋㅋㅋㅋ그치만 어디에서 풀스캔이 떠버리는지 모르는걸...ㅠ 이러면 무조건 where에 아무 조건이나 걸어서 조회하라고 함“조건 하나라도 걸어라”의 진짜 의도상사가 말하고 싶은 건 이거였을 확률 높음:“조회 범위를 의식하고 쿼리를 짜라”WHERE created_at >= :fro..