Я хочу додати індекси до деяких стовпців таблиці створення. Чи є спосіб додати їх до визначення 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
запиті.
Пітер Краус шукає канонічну відповідь:
Є СУЧАСНИЙ СИНТАКС (рік 2020), тому, будь ласка, поясніть та покажіть приклади, сумісні з postgresql.org/docs/current/sql-createtable.html
Ви шукаєте вбудоване визначення індексу , яке недоступне для PostgreSQL до поточної версії 12. За винятком УНІКАЛЬНОГО / ОСНОВНОГО обмеження, що створює базовий індекс для вас.
[CONSTRAINT constraint_name] {CHECK (вираз) [NO INHERIT] | UNIQUE (ім'я стовпця [, ...]) індекс_параметри | ПЕРВИЧНИЙ КЛЮЧ (ім'я стовпця [, ...]) індекс_параметри |
Зразок синтаксису визначення вбудованого стовпця (тут 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? Філ Фактор
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-сервера (див. Теги).