ฉันต้องการเพิ่มดัชนีให้กับบางคอลัมน์ในตารางในการสร้าง มีวิธีเพิ่มเข้าไปในนิยาม CREATE TABLE หรือไม่หรือต้องเพิ่มในภายหลังด้วยแบบสอบถามอื่น
CREATE INDEX reply_user_id ON reply USING btree (user_id);
ฉันต้องการเพิ่มดัชนีให้กับบางคอลัมน์ในตารางในการสร้าง มีวิธีเพิ่มเข้าไปในนิยาม CREATE TABLE หรือไม่หรือต้องเพิ่มในภายหลังด้วยแบบสอบถามอื่น
CREATE INDEX reply_user_id ON reply USING btree (user_id);
คำตอบ:
ดูเหมือนจะไม่มีวิธีใดในการระบุดัชนีในCREATE TABLE
ไวยากรณ์ อย่างไรก็ตาม PostgreSQL สร้างดัชนีสำหรับข้อ จำกัด เฉพาะและคีย์หลักตามค่าเริ่มต้นดังที่อธิบายไว้ในบันทึกย่อนี้ :
PostgreSQL จะสร้างดัชนีสำหรับข้อ จำกัด ที่ไม่ซ้ำกันและข้อ จำกัด ของคีย์หลักโดยอัตโนมัติเพื่อบังคับใช้ความเป็นเอกลักษณ์
นอกเหนือจากนั้นหากคุณต้องการดัชนีที่ไม่ซ้ำกันคุณจะต้องสร้างขึ้นเองในCREATE INDEX
แบบสอบถามแยกต่างหาก
ไม่
แต่คุณสามารถสร้างunique
ดัชนีในการสร้าง แต่นั่นเป็นเพราะพวกเขาจะจัดว่าเป็นข้อ จำกัด คุณไม่สามารถสร้างดัชนี "ทั่วไป"
Peter Krauss กำลังมองหาคำตอบที่เป็นที่ยอมรับ:
มี MODERN SYNTAX (ปี 2020) ดังนั้นโปรดอธิบายและแสดงตัวอย่างเข้ากันได้กับ postgresql.org/docs/current/sql-createtable.html
คุณกำลังค้นหานิยามดัชนีแบบอินไลน์ซึ่งใช้ไม่ได้สำหรับ PostgreSQL จนถึงเวอร์ชันปัจจุบัน 12 ยกเว้นข้อ จำกัด UNIQUE / PRIMARY KEY ที่สร้างดัชนีพื้นฐานให้คุณ
[CONSTRAINT constraint_name] {CHECK (expression) [NO INHERIT] | UNIQUE (column_name [, ... ]) index_parameters | คีย์หลัก (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
);
เหตุผลเบื้องหลังการแนะนำพวกเขาค่อนข้างน่าสนใจInline Indexes คืออะไร? โดย Phil Factor
b VARCHAR(10) NOT NULL INDEX idx_tab_b gin (b gin_trgm_ops)
.. จะเพิ่มพารามิเตอร์โดยไม่ใช้ชื่อคอลัมน์ซ้ำได้อย่างไร
CREATE INDEX idxName ON tableName USING MethodName (fieldName optionName);
ลงในไวยากรณ์ของคำนิยามดัชนีแบบอินไลน์ PS: คำถามนี้เกี่ยวกับ PostgreSQL ไม่ใช่ Microsoft-SQL-Server (ดูแท็ก)