단일 열 인덱스 생성
이 단계에서는 users라는 샘플 테이블을 생성한 다음 email 열에 단일 열 인덱스를 생성합니다. 인덱스는 데이터베이스 쿼리 성능을 향상시키는 데 매우 중요하며, 특히 대규모 테이블을 다룰 때 더욱 그렇습니다.
먼저 postgres 사용자로 PostgreSQL 데이터베이스에 연결합니다.
sudo -u postgres psql
이제 users 테이블을 생성합니다. 다음 SQL 명령을 실행합니다.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(100),
created_at TIMESTAMP
);
이 명령은 id, username, email, created_at 열을 가진 users라는 테이블을 생성합니다. id 열은 기본 키이며 자동으로 증가합니다.
다음으로 users 테이블에 샘플 데이터를 삽입합니다. 다음 SQL 명령을 실행합니다.
INSERT INTO users (username, email, created_at) VALUES
('john_doe', 'john.doe@example.com', NOW()),
('jane_smith', 'jane.smith@example.com', NOW()),
('peter_jones', 'peter.jones@example.com', NOW()),
('mary_brown', 'mary.brown@example.com', NOW()),
('alice_wilson', 'alice.wilson@example.com', NOW()),
('bob_davis', 'bob.davis@example.com', NOW()),
('carol_garcia', 'carol.garcia@example.com', NOW()),
('david_martinez', 'david.martinez@example.com', NOW()),
('emma_anderson', 'emma.anderson@example.com', NOW()),
('frank_taylor', 'frank.taylor@example.com', NOW());
-- 인덱스 사용에 충분하도록 테이블을 크게 만들기 위해 추가 행 삽입
INSERT INTO users (username, email, created_at)
SELECT
'user_' || generate_series(1, 1000),
'user' || generate_series(1, 1000) || '@example.com',
NOW();
이제 users 테이블에 1000 개 이상의 행을 삽입했습니다. 이 더 큰 데이터셋은 인덱스 사용을 더 효과적으로 시연하는 데 도움이 될 것입니다. PostgreSQL 은 일반적으로 전체 테이블을 스캔하는 것보다 성능 이점을 제공하는 경우 인덱스를 사용하기 때문입니다.
email 열을 기반으로 쿼리를 더 빠르게 실행하려면 email 열에 인덱스를 생성합니다. 다음 SQL 명령을 실행합니다.
CREATE INDEX idx_users_email ON users (email);
이 명령은 users 테이블의 email 열에 idx_users_email이라는 인덱스를 생성합니다.
인덱스가 생성되었는지 확인하려면 psql에서 \di 명령을 사용할 수 있습니다. 다음 명령을 실행합니다.
\di
출력에서 idx_users_email 인덱스가 나열된 것을 볼 수 있습니다.
마지막으로 다음을 입력하여 psql 셸을 종료합니다.
\q