Решение простое: не делайте set statistics
после каждой перезагрузки (или не перезагружайте его так часто, что эта задержка в одну минуту становится заметной).
Статистика индекса, которую вычисляет Firebird, относительно проста,поэтому, если ваш объем данных (количество строк) не будет регулярно меняться на порядки или селективность («уникальность» значений индекса) сильно варьируется между «очень уникальными» и «очень идентичными», пересчет, вероятно, не окажет заметного влияния на оптимизатор,потому что вычисленная статистика будет лишь немного отличаться, что делает значение ее пересчета небольшим.
Причина, по которой это занимает много времени в первый раз после перезагрузки, возможно потому, что ваша база данных (или, по крайней мере,страницы индекса) может полностью вписаться в кеш файловой системы.Выполнение set statistics
для всех индексов сразу после загрузки приведет к чтению всех страниц индекса в кэш.
Последующие повторные выполнения set statistics
смогут читать страницы из кэша, что исключает попадание на диск., что делает его значительно быстрее.
Имейте в виду, вполне возможно, что это использование set statistics
на самом деле является преднамеренным и используется (злоупотребляет) для заполнения кеша файловой системы.Таким образом, после начального снижения производительности при запуске все другие пользователи базы данных получают преимущества от загрузки всех индексов в кэш файловой системы.
Если это рабочая процедура в вашей компании, вы можетеЯ хочу спросить вокруг , почему нужно делать set statistics
после каждой перезагрузки (потому что действительно: кроме этого трюка, нет необходимости регулярно делать это, если объем и уникальность значений индекса относительно стабильны).