Генерация нескольких индексов в одной таблице postgres - PullRequest
0 голосов
/ 19 октября 2018

У меня есть некоторый исходный синтаксис, который мне нужно преобразовать из MySQL в postgreSQL.Кажется, что в postgres нет аналога для генерации нескольких индексов в одной таблице.Кроме того, у меня возникают проблемы с пониманием того, почему можно создать несколько индексов для одной таблицы:

ALTER TABLE concept 
  ADD PRIMARY KEY (table_id), 
  ADD UNIQUE INDEX idx_table_table_id (table_id), 
  ADD INDEX idx_table_code (table_code), 
  ADD INDEX idx_table_v_id (v_id), 
  ADD INDEX idx_cd_id (d_id), 
  ADD INDEX idx_table_class_id (table_class_id);

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

В PostgreSQL каждое ограничение добавляется отдельно.См. ALTER TABLE .

Ваш отдельный оператор DDL (язык определения данных) необходимо разбить на:

  • Ограничения проверяйте данные в соответствии с правилами:

    ALTER TABLE concept ADD PRIMARY KEY (table_id);
    
  • Индексы полезны для ускорения некоторых запросов.Используйте внимательно:

    CREATE INDEX idx_table_code ON concept (table_code);
    
    CREATE INDEX idx_table_v_id ON concept (v_id);
    
    CREATE INDEX idx_cd_id ON concept (d_id);
    
    CREATE INDEX idx_table_class_id ON concept (table_class_id);
    

    Примечание: Создавайте индексы только тогда, когда они вам нужны.Мое эмпирическое правило не должно превышать 10 для каждой таблицы.Если я доберусь до этого уровня, то мне нужно тщательно пересмотреть то, что я делаю.

0 голосов
/ 19 октября 2018

Как кто-то сказал ранее, вы должны сделать оператор CREATE INDEX для каждого индекса.

О множественном индексе в таблице ... проблема в том, что иногда запросы к одной таблице могут сильно отличаться,В вашем примере, не то же самое сделать SQL с предикатом на основе столбца table_code или на основе столбца d_id.

Вот почему иногда лучше сделать отдельный индекс для обоих.Может быть, кажется проще и лучше создать единый индекс для обоих столбцов, но вы должны подумать, что порядок столбцов индекса очень важен, и даже более того, если оба столбца имеют много разных значений.Также не всегда столбцы table_code или d_id могут быть в sqls.

0 голосов
/ 19 октября 2018

Вы можете разбить его на отдельные утверждения.Также обратите внимание, что создание первичного ключа неявно создаст уникальный индекс для этого столбца, поэтому вам не следует пытаться создать его явно:

ALTER TABLE concept ADD PRIMARY KEY (table_id); 
ALTER TABLE concept ADD INDEX idx_table_code (table_code);
ALTER TABLE concept ADD INDEX idx_table_v_id (v_id);
ALTER TABLE concept ADD INDEX idx_cd_id (d_id);
ALTER TABLE concept ADD INDEX idx_table_class_id (table_class_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...