MySQL 인덱스 퀴즈 - 세트 G
총 7개 문제로 구성된 MySQL 인덱스 학습 퀴즈입니다.
문제 1. 다음과 같은 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),
);
CREATE INDEX ix_firstname ON employees (first_name ASC);
```
다음 쿼리는 ix_firstname 인덱스를 활용하는가?
```sql
SELECT * FROM employees ORDER BY first_name ASC LIMIT 4;
```
문제 2. 다음 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),
);
CREATE INDEX ix_firstname ON employees (first_name ASC);
```
다음 쿼리는 ix_firstname 인덱스를 활용하는가?
```sql
SELECT * FROM employees ORDER BY first_name DESC LIMIT 5;
```
문제 3. 다음 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),
);
CREATE INDEX ix_firstname ON employees (first_name ASC);
```
다음 쿼리는 ix_firstname 인덱스를 스캔할 까?
```sql
SELECT * FROM employees ORDER BY emp_no DESC LIMIT 4;
```
문제 4. 다음 t1의 테이블이 있다.
```sql
CREATE TABLE t1
(
tid INT NOT NULL AUTO_INCREMENT,
TABLE_NAME VARCHAR(64),
COLUMN_NAME VARCHAR(64),
ORDINAL_POSITION INT,
PRIMARY KEY (tid)
)ENGINE=InnoDB;
```
해당 테이블에 6천만건의 레코드가 있다고 하였을 때 오름차순 조회 쿼리와 내림차순 조회 쿼리의 속도를 비교하시오.
```text
ASC_QUERY : SELECT * FROM t1 ORDER BY tid ASC LIMIT 60030975,1;
DESC_QUERY : SELECT * FROM t1 ORDER BY tid DESC LIMIT 60030975,1;
```
- ASC_QUERY와 DESC_QUERY의 속도가 비슷하다.
- ASC_QUERY의 속도가 더 빠르다.
- DESC_QUERY의 속도가 더 빠르다.
문제 5. 다음 t1 데이터 테이블이 있다.
```sql
CREATE TABLE t1
(
tid INT NOT NULL AUTO_INCREMENT,
TABLE_NAME VARCHAR(64),
COLUMN_NAME VARCHAR(64),
ORDINAL_POSITION INT,
PRIMARY KEY (tid)
)ENGINE=InnoDB;
```
다음과 같이 내림차순으로 tid와 COLUMN_NAME을 탐색하는 쿼리가 있다.
```sql
SELECT tid, column_name FROM t1 ORDER BY COLUMN_NAME DESC LIMIT 11862915, 1
```
오름차순 인덱스와 내림차순 인덱스가 있을 때 각 인덱스 활용 시나리오의 효율을 비교하시오.
```sql
CREATE INDEX column_name_asc on t1(column_name ASC);
CREATE INDEX column_name_desc on t1(column_name DESC);
```
- 오름차순 인덱스(column_name_asc)를 활용하는 것이 더 빠르다
- 내림차순 인덱스(column_name_desc)를 활용하는 것이 더 빠르다
- 두 인덱스 활용 속도에 큰 차이가 없다.
문제 6. 다음 test_icp 테이블이 있다.
```sql
CREATE TABLE test_icp (
id INT PRIMARY KEY AUTO_INCREMENT,
num INT,
name VARCHAR(255),
address VARCHAR(255),
INDEX idx_num_name (num, name)
);
```
MySql 8.0 버전에서 다음 쿼리에 대하여 idx_num_name에 대한 활용계획으로 알맞은 것을 고르시오
```sql
SELECT * FROM test_icp WHERE num = 1 and name like '%q';
```
- (num =1) 을 인덱스 테이블에서 필터링하고, 테이블을 스캔하며, (name like '%q') 조건에 알맞는 행을 골라낸다.
- (num=1) 과 (name like '%q')을 인덱스 테이블에서 필터링하고, 테이블에서 조건에 알맞는 행을 골라낸다.
문제 7. 다음 test_icp 테이블이 있다.
```sql
CREATE TABLE test_icp (
id INT PRIMARY KEY AUTO_INCREMENT,
num INT,
name VARCHAR(255),
address VARCHAR(255),
INDEX idx_num_name (num, name)
);
```
MySql 8.0 버전에서 다음 쿼리에 대하여 idx_num_name에 대한 활용계획으로 알맞은 것을 고르시오
```sql
SET optimizer_switch = 'index_condition_pushdown=off';
SELECT * FROM test_icp WHERE num = 1 and name like '%q';
```
- (num =1) 을 인덱스 테이블에서 필터링하고, 테이블을 스캔하며, (name like '%q') 조건에 알맞는 행을 골라낸다.
- (num=1) 과 (name like '%q')을 인덱스 테이블에서 필터링하고, 테이블에서 조건에 알맞는 행을 골라낸다.
다른 퀴즈 세트 보기