Однозначного победителя нет: Hash рассчитан на равенство, но B-tree часто столь же практичен и поддерживает больше операций. Быстрее определяется измерением на конкретных данных и запросе.
Что быстрее работает по точному совпадению — B-tree или Hash индекс в PostgreSQL?
Однозначного победителя нет: Hash рассчитан на равенство, но B-tree часто столь же практичен и поддерживает больше операций. Быстрее определяется измерением на конкретных данных и запросе.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Однозначного победителя нет: Hash рассчитан на равенство, но B-tree часто столь же практичен и поддерживает больше операций. Быстрее определяется измерением на конкретных данных и запросе.
Hash хранит хеши значений и требует проверки возможных совпадений; большие бакеты и распределение данных влияют на стоимость. B-tree поддерживает диапазоны, сортировку и другие сценарии, поэтому один индекс может обслуживать больше запросов. Теоретические O(1) и O(log n) не учитывают кеш, I/O, коллизии и цену чтения строки. Сравнивайте планы, buffers и latency характерной нагрузки, а также обслуживание индекса. Не выбирайте Hash только потому, что условие записано через равно.
Источник: www.postgresql.org.