-- 사용자 활동 테이블
CREATE TABLE user_activities (
id BIGINT PRIMARY KEY,
user_id INT,
activity_type VARCHAR(20),
created_date DATE,
INDEX idx_user_id (user_id),
INDEX idx_activity_type (activity_type)
);
-- 데이터 분포 상황:
-- 전체 레코드: 10,000,000건
-- user_id = 1 (관리자): 9,500,000건
-- user_id = 2~10000: 500,000건
-- activity_type = 'page_view': 9,800,000건
-- activity_type = 'purchase': 200,000건
SELECT * FROM user_activities
WHERE user_id = 1 AND activity_type = 'purchase';
-- RBO 규칙: 조건절(where)의 순서대로 데이터를 스캔한다.
-- 실행 과정:
-- 1. user_id = 1로 인덱스 스캔 → 9,500,000건 반환
-- 2. 9,500,000건을 스캔하며 activity_type = 'purchase' 필터링
-- 비용 기반:
-- 1. activity_type = 'purchase'로 인덱스 스캔 → 200,000건 반환
-- 2. 200,000건을 스캔하며 user_id = 1 필터링SET SESSION innodb_parallel_read_threads = 4;
SELECT COUNT(*) FROM salaries;