Ответ 1
Во-первых, позвольте мне отметить, что я не эксперт Firebird, поэтому я отвечаю на основе того, как работает SQL Server.
В этом случае ответ будет как "да", так и "нет".
Индексы, конечно, обновляются на SQL Server, в том смысле, что если вы вставляете новую строку, все индексы для этой таблицы будут содержать эту строку, поэтому она будет найдена. Таким образом, вам не нужно постоянно перематывать таблицы для работы этой части. Это "нет".
Проблема, однако, связана не с индексом, а со статистикой. Вы говорите, что вам нужно переинсталлировать таблицы, но затем вы показываете код, который управляет статистикой, и почему я отвечаю.
Короткий ответ заключается в том, что с течением времени статистика медленно выходит из строя. Они могут не ухудшиться до такой степени, что они непригодны для использования, но они будут ухудшаться от идеального уровня, в котором они находятся, когда вы их воссоздаете/пересчитаете. Это часть "да".
Основная проблема с устаревшей статистикой заключается в том, что если распределение ключей в индексах кардинально меняется, статистика может не сразу выбрать это, и, таким образом, оптимизатор запросов будет выбирать неправильные индексы на основе старого, устаревшего, статистические данные, которые у него имеются.
Например, скажем, что у одного из ваших индексов есть статистика, в которой говорится, что ключи сгруппированы вместе в одном конце пространства значений (например, int-column с большим количеством 0 и 1). Затем вы вставляете много и много строк со значениями, которые делают этот индекс, содержащий значения, разбросанные по всему спектру.
Если теперь вы выполняете запрос, который использует соединение из другой таблицы, в столбце с низкой избирательностью (также много 0 и 1) по отношению к таблице с этим индексом ваш оптимизатор запросов может вывести, что этот индекс хорош, так как он будет извлекать много строк, которые будут использоваться одновременно (они находятся на одной странице данных).
Однако, поскольку данные были изменены, он будет перескакивать по всему индексу, чтобы найти соответствующие фрагменты, и, следовательно, не все так хорошо.
После пересчета статистики оптимизатор запросов может увидеть, что этот индекс является неоптимальным для этого запроса и вместо этого выбирает другой индекс. Это более подходит.
В принципе, вам нужно периодически пересчитывать статистику, если ваши данные находятся в движении. Если ваши данные редко меняются, вам, вероятно, не нужно делать это очень часто, но я все равно добавлю работу по обслуживанию с некоторой регулярностью, которая делает это.
Что касается того, можно ли попросить Firebird сделать это самостоятельно, то опять же, я на тонком льду, но я подозреваю, что есть. В SQL Server вы можете настроить рабочие задания, которые делают это по расписанию, и, по крайней мере, вы должны иметь возможность запускать пакетный файл из планировщика Windows, чтобы сделать что-то вроде этого.