[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
);

db <> 바이올린 데모

그것들을 도입 한 이유는 매우 흥미 롭습니다. 인라인 인덱스 란 무엇입니까? 필 팩터


답변