65.4. Реализация#
65.4. Реализация #
65.4.1. Методы построения индекса GiST #
Самый простой способ построить индекс GiST - это просто вставить все записи по одной. Это обычно медленно для больших индексов, потому что если кортежи индекса разбросаны по индексу и индекс достаточно большой, чтобы не поместиться в кеш, потребуется много случайного ввода-вывода. PostgreSQLподдерживает два альтернативных метода для начального построения индекса GiST: режимы отсортированный и буферизованный
Метод sorted доступен только если каждый из opclasses, используемых индексом, предоставляет функцию sortsupport
, как описано в разделе Раздел 65.3. Если это так, то этот метод обычно является наилучшим, поэтому он используется по умолчанию.
Метод buffered работает так, что он не вставляет кортежи непосредственно в индекс сразу же. Это может значительно сократить количество случайных операций ввода-вывода, необходимых для неупорядоченных наборов данных. Для хорошо упорядоченных наборов данных преимущество меньше или отсутствует, потому что только небольшое количество страниц получает новые кортежи за раз, и эти страницы помещаются в кеш, даже если весь индекс не помещается.
Метод buffered должен вызывать функцию penalty
чаще, чем простой метод, что потребляет дополнительные ресурсы ЦП. Кроме того, буферы требуют временного дискового пространства, до размера результирующего индекса. Буферизация также может влиять на качество результирующего индекса как в положительном, так и в отрицательном направлении. Это влияние зависит от различных факторов, таких как распределение входных данных и реализация класса операторов.
Если сортировка невозможна, то по умолчанию при построении индекса GiST используется метод буферизации, когда размер индекса достигает значения effective_cache_size. Буферизацию можно включить или отключить вручную с помощью параметра buffering
команды CREATE INDEX. По умолчанию это поведение подходит для большинства случаев, но отключение буферизации может ускорить построение немного, если входные данные упорядочены.