Обычно ... избегайте индексов и внешних ключей в больших таблицах. Каждая вставка / обновление в индексированном столбце подразумевает частичную перестройку индекса, а иногда это может быть очень дорогостоящим. Конечно, вам придется торговать скоростью запросов против скорости записи, но это известная проблема в проектировании баз данных. Вы можете объединить это с базой данных NoSQL с неким механизмом кеширования запросов. Возможно, быстрая система NoSQL находится перед вашей транзакционной системой.
Другой вариант - использовать транзакции, чтобы выполнить много записей за один раз. Когда вы фиксируете транзакцию, индексы будут перестраиваться, но только один раз на транзакцию, а не по одной на запись.