Я хочу добавить индексы к некоторым столбцам таблицы при создании. Есть ли способ добавить их в определение 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. За исключением ограничения UNIQUE / PRIMARY KEY, которое создает для вас базовый индекс.
[CONSTRAINT имя_ограничения] {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
);
Обоснование их введения довольно интересно. Что такое встроенные индексы? Автор Фил Фактор
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 (см. Теги).