Index Quiz

MySQL 인덱스에 대한 지식을 테스트하고 향상시켜보세요!

문제 1 / 7

질문이 여기에 표시됩니다...

MySQL 인덱스 퀴즈 - 세트 A

총 7개 문제로 구성된 MySQL 인덱스 학습 퀴즈입니다.

문제 1. 다음과 같이 인덱스가 없는 `no_index_table`와 인덱스가 설정된 `index_table`가 있습니다. ```sql CREATE TABLE no_index_table ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT, city VARCHAR(255) ); CREATE TABLE index_table ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT, city VARCHAR(255), INDEX idx_name (name), INDEX idx_age_city (age, city) ); ``` 다음 두 쿼리를 실행했을 때 각각 **어느 테이블에서 더 빠른 성능을 보이는지** 고르세요. ```sql -- A쿼리: 10만 건의 더미 데이터를 삽입 INSERT INTO 테이블 (name, age, city) SELECT CONCAT('NewName', FLOOR(RAND() * 1000000)), FLOOR(RAND() * 100), CONCAT('NewCity', FLOOR(RAND() * 1000)) FROM (SELECT 1 FROM information_schema.tables LIMIT 100000) a; -- B쿼리: 특정 name 값 검색 SELECT * FROM 테이블 WHERE name = 'Name12345'; ```

  • A(insert) : no_index_table - B(select) : no_index_table
  • A(insert) : no_index_table - B(select) : index_table
  • A(insert) : index_table - B(select) : no_index_table
  • A(insert) : index_table - B(select) : index_table

문제 2. 다음과 같이 **InnoDB 스토리지 엔진**을 사용하여 **B-Tree 인덱스**를 사용하는 `btree_table`와 **Memory 스토리지 엔진**을 사용하여 **Hash 인덱스**를 사용하는 `hash_table`이 있다. ```sql -- B-Tree 인덱스를 사용하는 InnoDB 테이블 CREATE TABLE btree_table ( id INT PRIMARY KEY, value INT, INDEX idx_value (value) ) ENGINE=InnoDB; -- Hash 인덱스를 사용하는 Memory 테이블 CREATE TABLE hash_table ( id INT PRIMARY KEY, value INT, INDEX idx_value (value) ) ENGINE=MEMORY; ``` --- 다음 두 쿼리를 실행했을 때, **인덱스를 활용한 탐색 성능이 더 빠른 쪽**을 고르시오. ```sql -- B-Tree에서 동등조건 탐색 SELECT * FROM btree_table WHERE value = 12345; -- Hash에서 동등조건 탐색 SELECT * FROM hash_table WHERE value = 12345; ```

  • B-Tree 인덱스를 사용하는 btree table의 인덱스 스캔이 더 빠르다
  • Hash 인덱스를 사용하는 hash table의 인덱스 스캔이 더 빠르다
  • 두 인덱스 스캔 속도는 비슷하다

문제 3. 다음과 같이 **InnoDB 스토리지 엔진**을 사용하여 **B-Tree 인덱스**를 사용하는 `btree_table`와 **Memory 스토리지 엔진**을 사용하여 **Hash 인덱스**를 사용하는 `hash_table`이 있다.
 ```sql -- B-Tree 인덱스를 사용하는 InnoDB 테이블 CREATE TABLE btree_table ( id INT PRIMARY KEY, value INT, INDEX idx_value (value) ) ENGINE=InnoDB; -- Hash 인덱스를 사용하는 Memory 테이블 CREATE TABLE hash_table ( id INT PRIMARY KEY, value INT, INDEX idx_value (value) ) ENGINE=MEMORY; ``` 다음 두 쿼리에 있어서 인덱스를 활용한 쿼리의 성능을 비교하시오 ```sql -- B-Tree에서 범위조건 탐색 SELECT * FROM btree_table WHERE value BETWEEN 1000 AND 2000; -- Hash에서 범위조건 탐색 SELECT * FROM hash_table WHERE value BETWEEN 1000 AND 2000; ```

  • B-Tree 인덱스를 사용하는 btree table의 인덱스 스캔이 더 빠르다
  • Hash 인덱스를 사용하는 hash table의 인덱스 스캔이 더 빠르다
  • 두 인덱스 스캔 속도는 비슷하다

문제 4. Memory 스토리지 엔진을 사용하여 Hash Index를 사용하는 hash_table이 있다. ```sql -- Hash 인덱스를 사용하는 Memory 테이블 CREATE TABLE hash_table ( id INT PRIMARY KEY, value INT, INDEX idx_value (value) ) ENGINE=MEMORY; ``` 다음 쿼리는 hash_table의 idx_value 인덱스를 활용하는가? ```sql select * from hash_table order by value; ```

  • 해쉬 인덱스인 idx_value를 활용한다.
  • 해쉬 인덱스인 idx_value를 활용하지 않는다.

문제 5. InnoDB 테이블에서 클러스터링 인덱스가 설정되어 있는 경우, **보조 인덱스**의 리프 노드에는 어떤 정보가 저장되는가?

  • 해당 인덱스 컬럼 값과 실제 레코드 전체 데이터
  • 해당 인덱스 컬럼 값과 NULL
  • 해당 인덱스 컬럼 값과 클러스터링 인덱스의 키 값
  • 해당 인덱스 컬럼 값만 저장되며, 나머지 데이터는 저장되지 않는다

문제 6. 다음 중 MySQL InnoDB 스토리지 엔진에서 
**클러스터링 인덱스(≒ Primary Key)** 에 대한 설명으로 **올바른 것**은 무엇인가요?

  • 클러스터링 인덱스는 인덱스만 저장하고 실제 데이터는 별도 공간에 저장된다.
  • 클러스터링 인덱스는 보조 인덱스보다 느리기 때문에 잘 사용되지 않는다.
  • 클러스터링 인덱스는 테이블당 여러 개 생성할 수 있다.
  • 클러스터링 인덱스는 리프 노드에 실제 데이터 레코드를 저장한다.

문제 7. employee 테이블에 생성되는 인덱스의 개수는 몇 개인가? ```sql CREATE TABLE department ( dept_id INT PRIMARY KEY ); CREATE TABLE employee ( emp_id INT PRIMARY KEY, email VARCHAR(255) UNIQUE, dept_id INT, hire_date DATE, CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES department(dept_id) ); ```

  • 1개
  • 2개
  • 3개
  • 4개

다른 퀴즈 세트 보기