전체 글 36

[35번] 인덱스 루스 스캔 TF (3)

문제 다음 broccoli 테이블이 있다.CREATE TABLE broccoli ( id INT PRIMARY KEY AUTO_INCREMENT, num INT, name VARCHAR(100), color VARCHAR(50), INDEX idx_name_color (name(5), color) #name의 앞 5글자를 따온 부분 인덱스); 다음 쿼리는 인덱스 루스 스캔을 활용 가능한가?SELECT name, MIN(color) FROM broccoli GROUP BY name; 선지A) 가능하다B) 불가능하다 정답더보기A) 가능하다B) 불가능하다 핵심 해설 인덱스 루스 스캔은 Group BY된 기준과 집계 함수가 있을 때 건너뛸 수 있는 행이 있어야 가능합니다. 또한, 부..

[34번] 인덱스 루스 스캔 TF (2)

문제 다음의 test_table 이 있다.CREATE TABLE test_table ( id INT PRIMARY KEY AUTO_INCREMENT, col1 INT, col2 INT, col3 INT, col4 INT, INDEX idx_col1_col2_col3 (col1, col2, col3)); 다음 쿼리는 인덱스 루스 스캔을 활용 가능한가?SELECT col1, AVG(DISTINCT col2) FROM tb_test GROUP BY col1; 선지 A) 가능하다B) 불가능하다 정답더보기A) 가능하다B) 불가능하다 핵심 해설 MySql 8.0 공식문서에서는 인덱스 루스 스캔에 MAX, MIN 뿐만 아니라, COUNT(DISTINCT), SUM(DISTINCT), ..

[33번] 인덱스 루스 스캔 TF (1)

문제 다음의 test_table 이 있다.CREATE TABLE test_table ( id INT PRIMARY KEY AUTO_INCREMENT, col1 INT, col2 INT, col3 INT, col4 INT, INDEX idx_col1_col2_col3 (col1, col2, col3)); 다음 쿼리는 인덱스 루스 스캔을 활용 가능한가?SELECT co1, SUM(col2) FROM t1 GROUP BY col1; 선지 A) 가능하다B) 불가능하다 정답더보기A) 가능하다B) 불가능하다 핵심 해설 인덱스 루스 스캔은 Group BY된 기준과 집계 함수가 있을 때 건너뛸 수 있는 행이 있어야 가능합니다. 그러나 SUM(col2)의 경우에는 col1로 그룹핑된 co..

[32번] Group by 시 인덱스 루스 스캔

문제 다음 dept_empt 테이블이 있다CREATE TABLE dept_emp ( emp_no int NOT NULL, dept_no char(4) NOT NULL, from_date date NOT NULL, to_date date NOT NULL, PRIMARY KEY (`dept_no`,`emp_no`),); 다음 쿼리에 대한 인덱스 스캔에 대한 설명 중 옳은 것은?SELECT dept_no, MIN(emp_no) FROM dept_emp as emp WHERE emp.dept_no BETWEEN 'd002' AND 'd004' GROUP BY emp.dept_no; 선지 A) dept_no가 'd002'와 'd004' 범위 안에서 인덱스를 듬성듬성 스캔한다 - 루스 인덱스 스캔B) de..

[31번] Using index vs Using where

문제다음 테이블이 있다.CREATE TABLE my_table ( id BIGINT PRIMARY KEY AUTO_INCREMENT, a INT, b INT, date_column DATE, INDEX idx_a_date (a, date_column)); 먼저 해당 쿼리를 실행했다고 가정한다.EXPLAIN SELECT date_column, COUNT(*) FROM my_table WHERE a = 1 GROUP BY date_column; 위의 쿼리에 'b=1' 조건을 추가하여 실행할 때 위의 쿼리와의 실행속도를 비교하시오.EXPLAIN SELECT date_column, COUNT(*) FROM my_table WHERE a = 1 AND b = 1 GROUP BY date_colum..

[30번] 세컨더리 인덱스 (2)

문제다음 테이블과 인덱스가 있을 때, col2 조건문을 사용하는 쿼리의 실행 방식에 대한 설명으로 올바른 것은?CREATE TABLE test_case ( col1 BIGINT PRIMARY KEY, col2 VARCHAR(100), col3 INT) ENGINE=InnoDB;CREATE INDEX idx_col2 ON test_case(col2);SELECT col1FROM test_caseWHERE col2 = 'ABC'; 선지idx_col2의 리프 노드에 col1와 col2가 모두 저장되어 있으므로 인덱스 테이블만 활용하여 바로 결과를 반환할 수 있다.idx_col2의 리프 노드에서 col1와 col2를 찾을 수 있으므로, col3 값을 가져오기 위해 클러스터링 인덱스를 한 번 더 ..

[29번] 세컨더리 인덱스 (1)

문제다음 테이블과 인덱스가 있을 때, col2 조건문을 사용하는 쿼리의 실행 방식에 대한 설명으로 올바른 것은?CREATE TABLE test_case ( col1 BIGINT PRIMARY KEY, col2 VARCHAR(100), col3 INT) ENGINE=InnoDB;CREATE INDEX idx_col2 ON test_case(col2);SELECT *FROM test_caseWHERE col2 = 'ABC'; 선지idx_col2의 리프 노드에서 col1와 col2를 찾을 수 있으므로, col3 값을 가져오기 위해 클러스터링 인덱스를 한 번 더 조회해야 한다.idx_col2의 리프 노드에서 col2를 찾을 수 있으므로, col1과 col3 값을 가져오기 위해 클러스터링 인덱스를..

[28번] not in 절

문제 다음과 같은 employees 테이블과 first_name컬럼을 대상으로 한 ix_firstname 인덱스가 존재한다.CREATE TABLE employees ( emp_no INT NOT NULL, birth_date DATE NOT NULL, first_name VARCHAR(14) NOT NULL, last_name VARCHAR(16) NOT NULL, gender ENUM('M','F') NOT NULL, hire_date DATE NOT NULL, PRIMARY KEY (emp_no), KEY idx_firstname (first_name)); 다음 쿼리는 ix_firstname을 활용하는가?SELECT * FROM employees emp WEHRE emp.first_n..

[27번] in 절

문제다음과 같은 employees 테이블과 first_name컬럼을 대상으로 한 ix_firstname 인덱스가 존재한다.CREATE TABLE employees ( emp_no INT NOT NULL, birth_date DATE NOT NULL, first_name VARCHAR(14) NOT NULL, last_name VARCHAR(16) NOT NULL, gender ENUM('M','F') NOT NULL, hire_date DATE NOT NULL, PRIMARY KEY (emp_no), KEY idx_firstname (first_name)); 다음 쿼리는 ix_firstname을 활용하는가?SELECT * FROM employees emp WEHRE emp.first_na..

[26번] 복합 인덱스의 범위조건 비효율

문제다음과 같은 employees 테이블이 있다.CREATE TABLE employees ( emp_no INT NOT NULL, birth_date DATE NOT NULL, first_name VARCHAR(14) NOT NULL, last_name VARCHAR(16) NOT NULL, gender ENUM('M','F') NOT NULL, hire_date DATE NOT NULL, PRIMARY KEY (emp_no),);employees 테이블에는 다음 2가지 인덱스가 존재한다.CREATE INDEX idx_date_name_gender_pk ON employees(birth_date, first_name, gender, emp_no);CREATE INDEX idx_name_gen..