MySQL 인덱스 퀴즈 - 세트 F
총 7개 문제로 구성된 MySQL 인덱스 학습 퀴즈입니다.
문제 1. 다음 test_table 테이블이 있다
```sql
CREATE TABLE test_table (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
address VARCHAR(200),
Index idx_name_age(name, age)
);
```
다음 쿼리를 실행할 때 실행계획에 대한 서술로 옳은 것을 고르시오.
```sql
SELECT name, age FROM test_table WHERE age > 0;
```
- idx_name_age를 활용하지 않는다.
- idx_name_age 인덱스 스캔만 일어나고 테이블 스캔은 일어나지 않는다.
- idx_name_age를 스캔한 이후, 테이블 스캔이 일어난다.
문제 2. 다음 test_table 테이블이 있다
```sql
CREATE TABLE test_table (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
address VARCHAR(200),
Index idx_name_age(name, age)
);
```
다음 쿼리를 실행할 때 실행계획에 대한 서술로 옳은 것을 고르시오.
```sql
SELECT id, name, age FROM test_table WHERE age > 0;
```
- idx_name_age를 활용하지 않는다.
- idx_name_age 인덱스 스캔만 일어나고 테이블 스캔은 일어나지 않는다.
- idx_name_age를 스캔한 이후, 테이블 스캔이 일어난다.
문제 3. 다음과 같은 test_table이 있다.
```sql
CREATE TABLE test_table (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
address VARCHAR(200),
Index idx_name_age(name, age)
);
```
다음 쿼리를 실행할 때 실행계획에 대한 서술로 옳은 것을 고르시오.
```sql
SELECT * FROM test_table WHERE age > 0;
```
- idx_name_age를 활용하지 않는다.
- idx_name_age 인덱스 스캔만 일어나고 테이블 스캔은 일어나지 않는다.
- idx_name_age를 스캔한 이후, 테이블 스캔이 일어난다.
문제 4. 다음 sample_table 테이블이 있다.
```sql
CREATE TABLE sample_table (
id BIGINT PRIMARY KEY,
a INT,
b INT,
data VARCHAR(100)
);
CREATE INDEX idx_a_b ON sample_table (a, b);
```
다음 쿼리에서 쿼리 실행계획에 대해 알맞은 것을 고르시오.
```sql
SELECT COUNT(*) FROM sample_table;
```
- 테이블 풀 스캔 : 데이터 테이블에 직접 접근하여 모든 행 탐색
- 인덱스 풀 스캔 : 인덱스 테이블에 접근하여 모든 행 탐색
- 인덱스 레인지 스캔 : 인덱스 테이블에 접근하여 특정 범위 탐색
- 루스 인덱스 스캔 : 인덱스 테이블을 띄엄띄엄 건너뛰며 탐색
문제 5. 복합 컬럼 col1, col2를 대상으로 유니크 인덱스 조건이 걸린 test_table이 있다.
```sql
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
col1 VARCHAR(50),
col2 VARCHAR(50),
UNIQUE KEY uniq_col1_col2 (col1, col2)
);
```
다음 쿼리를 실행할 때 예상되는 결과를 고르시오
```sql
INSERT INTO test_table (col1, col2) VALUES ('A', NULL);
INSERT INTO test_table (col1, col2) VALUES ('A', NULL);
```
- 두 삽입 쿼리 모두 성공한다
- 첫번째 삽입 쿼리는 성공하고 두번째 삽입 쿼리는 실패한다
- 두 삽입 쿼리 모두 실패한다
문제 6. 다음 employees 테이블이 있다
```sql
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),
INDEX idx_gender_birthdate (gender, birth_date)
);
```
다음 쿼리에 대한 실행계획 중 가장 알맞은 것을 고르시오.
(단, MySql 8.0 이상이며 디폴트 설정을 따른다)
```sql
SELECT gender, birth_date FROM employees WHERE birth_date >= '1965-02-01';
```
- 테이블 스캔 : 인덱스를 활용하지 않고 전체 테이블을 스캔함
- 인덱스 풀 스캔 : 인덱스 테이블을 전체 스캔함
- 인덱스 스킵 스캔 : 인덱스 테이블을 건너 뛰면서 읽음
- 인덱스 스캔 후, 테이블 스캔
문제 7. 다음 employees 테이블이 있다
```sql
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),
INDEX idx_gender_birth_date (gender, birth_date)
);
```
다음 쿼리에 대한 실행계획 중 가장 알맞은 것을 고르시오.
(단, MySql 8.0 이상이며 디폴트 설정을 따른다)
```sql
SELECT * FROM employees WHERE birth_date >= '1965-02-01';
```
- 테이블 스캔 : 인덱스를 활용하지 않고 전체 테이블을 스캔함
- 인덱스 풀 스캔 : 인덱스 테이블을 전체 스캔함
- 인덱스 스킵 스캔 : 인덱스 테이블을 건너 뛰면서 읽음
- 인덱스 스캔 후, 테이블 스캔
다른 퀴즈 세트 보기