[postgresql] PostgreSQL : CREATE TABLE 정의에서 인덱스를 생성 할 수 있습니까?
생성시 테이블의 일부 열에 인덱스를 추가하고 싶습니다. CREATE TABLE 정의에 추가하는 방법이 있습니까? 아니면 나중에 다른 쿼리로 추가해야합니까?
CREATE INDEX reply_user_id ON reply USING btree (user_id);
답변
CREATE TABLE
구문에 색인을 지정하는 방법이없는 것 같습니다 . 그러나 PostgreSQL 은이 노트에 설명 된대로 기본적으로 고유 제약 조건 및 기본 키에 대한 인덱스를 생성합니다 .
PostgreSQL은 고유성을 강화하기 위해 각 고유 제약 조건 및 기본 키 제약 조건에 대한 인덱스를 자동으로 생성합니다.
그 외에 고유하지 않은 인덱스를 원할 경우 별도의 CREATE INDEX
쿼리 에서 직접 생성해야 합니다.
답변
아니.
그러나 create에서 unique
인덱스를 만들 수 있지만 제약 조건 으로 분류되기 때문 입니다. “일반”색인을 만들 수 없습니다.
답변
Peter Krauss는 정식 답변을 찾고 있습니다.
현대 구문 (2020 년)이 있으므로 postgresql.org/docs/current/sql-createtable.html과 호환되는 예제를 설명하고 보여주십시오.
현재 버전 12까지는 PostgreSQL에서 사용할 수없는 인라인 인덱스 정의를 검색 하고 있습니다. UNIQUE / PRIMARY KEY 제약 조건을 제외하고는 기본 인덱스를 생성합니다.
[CONSTRAINT 제약 이름] {CHECK (표현식) [NO INHERIT] | UNIQUE (column_name [, …]) index_parameters | PRIMARY KEY (column_name [, …]) index_parameters |
인라인 열 정의의 샘플 구문 (여기서는 SQL Server) :
CREATE TABLE tab(
id INT PRIMARY KEY, -- constraint
c INT INDEX filtered (c) WHERE c > 10, -- filtered index
b VARCHAR(10) NOT NULL INDEX idx_tab_b, -- index on column
d VARCHAR(20) NOT NULL,
INDEX my_index NONCLUSTERED(d) -- index on column as separate entry
);
그것들을 도입 한 이유는 매우 흥미 롭습니다. 인라인 인덱스 란 무엇입니까? 필 팩터