설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 94건, 최근 0 건
   

primary / unique constraint 와 인덱스

글쓴이 : PostgresDBA 날짜 : 2015-01-07 (수) 23:59 조회 : 11523
오라클이나 PostgreSQL 이나 pk 나 unique constraint 제약 조건을 달면 인덱스는 자동으로 생성됩니다.
대신 constraint 삭제시 에는 처리 방식이 좀 다릅니다.

ALTER TABLE XXX DROP CONSTRAINT 등의 명령을 이용하여 PK 이나 Unique 제약조건을 삭제시에

오라클에서는  인덱스는 자동 삭제되지 않고 남아 있습니다.
하지만 PostgreSQL 에서는 인덱스까지 자동으로 삭제됩니다.

또한 PostgreSQL 은 인덱스 생성이 매우 자유분방(?) 합니다. 무슨 말이냐고 예제를 살펴보시죠.

scottdb=> create table x(x int);
CREATE TABLE
scottdb=> create unique index xuk01 on x(x);
CREATE INDEX
scottdb=> alter table x add constraint xpk primary key(x);
ALTER TABLE
scottdb=> select * from pg_indexes where schemaname='scott';
 schemaname | tablename | indexname | tablespace |                    indexdef                    
------------+-----------+-----------+------------+------------------------------------------------
 scott      | x         | xuk01     |            | CREATE UNIQUE INDEX xuk01 ON x USING btree (x)
 scott      | x         | xpk       |            | CREATE UNIQUE INDEX xpk ON x USING btree (x)
(2 rows)

scottdb=> select version();
                                                    version                                                    
---------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52), 64-bit
(1 row)

primary 제약조건을 달면서 UNIQUE INDEX 가 자동으로 하나 생성됐습니다.
결과적으로 인덱스 구성컬럼이 같은데 인덱스 명만 다른 두개의 인덱스가 생겨버렸습니다.

즉 PostgreSQL 에서는 인덱스 구성컬럼이 동일하다 하더라도 인덱스명만 다르면
중복생성이 가능하다는 얘깁니다. 개인적으론 고쳐져야  되지 않을까 싶습니다.

PostgreSQL DBA 라면 이런 불필요한 인덱스가 중복 생성 되지 않도록 관리를 잘하셔야 겠습니다.
 




PostgresDBA 2015-04-17 (금) 10:34
인덱스 구성 컬럼이 동일해도 인덱스명이 다르면 생성되는 현상은
MySQL 이나 SQL Server 에서도 동일하군요.

오라클이 특별한가 봅니다.
댓글주소
PostgresDBA 2017-04-10 (월) 11:29
실제 db 를 운영하다보니 동일 컬럼에 대한 중복 인덱스 생성이 나름대로 편이성이 있네요. (ex 인덱스 리빌드시)
오라클에서도 12c 서 부터 중복 인덱스 생성이 가능합니다. visible/invisible 추가 옵션이 필요하긴 하지만.
댓글주소
   

postgresdba.com