Вы не можете.
Вопрос, который я бы сразу спросил, хотите ли вы такой индекс: Да, но для каких значений WHERE
вы хотите использовать индекс? И ваш ответ был бы «для всех из них».
Если вам действительно нужен индекс только для некоторых значений, вы можете использовать частичный индекс :
INSERT
Но на самом деле вам нужен индекс для всей таблицы.
Кроме того, это INSERT
будет так же медленно, если строка COMMITed не удовлетворяет WHERE
условию вашего индекса.
Для ускорения можно сделать три вещи INSERT
:
-
Запускайте как можно больше
COMMIT
утверждений в одной транзакции, в идеале, все из них.Тогда вам не нужно платить цену за
COPY
каждый синглCOPY
, аCOMMIT
s довольно дорогие: им нужно записывать данные на аппаратное обеспечение диска (а не в кеш), и это невероятно медленно (1 мс приличное время).Вы можете ускорить это, даже если вы используете подготовленные заявления . Таким образом
INSERT
, не нужно анализировать и готовить каждый раз. -
Используйте команду SQL
COPY
для вставки многих строк.INSERT
специально разработан для импорта объемных данных и будет быстрееINSERT
. -
Если
COPY
нужно замедлить работу, как правило, потому что вам нужноINSERT
много данных, самым простым способом является удаление всех индексов, вставка данныхCOPY
и повторное создание индексов. Он может ускорить процесс на порядок, но, разумеется, база данных не полностью доступна, а индексы отбрасываются.