본문 바로가기

개발/Postgresql

postgreSql 에서 index

복합 인덱스에서 인덱스에서 지정된 첫 번째 컬럼의 검색 조건이 범위 조건이여도 인덱스가 실행된다.

즉, between, >=, <= 여도 인덱스가 실행된다.

첫 번째 컬럼이 조회 조건에 없으면 인덱스는 실행되지 않는다.

 

```sql

create table books

(

"bookId" serial primary key,

"title" varchar(100) not null,

"author" varchar(50) null,

"publishYear" varchar(4) not null,

"groupNo" varchar(100) default null

)

 

INSERT INTO books

("title", "author", "publishYear", "groupNo")

VALUES

('title', 'author', floor(random() * (EXTRACT(YEAR FROM CURRENT_DATE) - 1900 + 1) + 1900)::varchar, floor(random() * (99-10+1) + 10)::varchar);

 

DO $$

BEGIN

FOR i IN 1..1000000 LOOP

INSERT INTO books

("title", "author", "publishYear", "groupNo")

VALUES

('title' || i, 'author' || i, floor(random() * (EXTRACT(YEAR FROM CURRENT_DATE) - 1900 + 1) + 1900)::varchar, floor(random() * (99-10+1) + 10)::varchar);

END LOOP;

END $$;

 

drop index books_book_id_publish_year_group_no_idx;

create index books_publish_year_group_no_idx on books ("publishYear", "groupNo")

 

select * from books

where "publishYear" > '2020'

and "groupNo" = '10';

 

select * from books

where "groupNo" = '10'

and "publishYear" > '2020';

```