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