Каково различие между индексными методами B-дерева и GiST (в PostgreSQL)?

Вы не.

@action предназначен только для ViewSet, GenericViewSet, ModelViewSet, все они найдены в rest_framework.viewsets.

17
задан Charles 29 March 2014 в 03:31
поделиться

4 ответа

В двух словах: Индексы B-Tree работают лучше, но индексы GiST более гибкие. Обычно вам нужны индексы B-Tree, если они будут работать для вашего типа данных. Недавно в списках PG появилось сообщение об огромном падении производительности при использовании индексов GiST; ожидается, что они будут медленнее, чем B-деревья (такова цена гибкости), но не , что намного медленнее ... работа, не индексируется в btree. ... можно было бы полностью ожидать, что btree превзойдет GIST для btree-indexable случаев. я думаю Важным моментом здесь является то, что он выигрывает в пару раз сто; это довольно ужасно, и может указывать на некоторую реализацию проблема.

23
ответ дан 30 November 2019 в 12:14
поделиться

GiST являются более общими показателями. Вы можете использовать их для более широких целей, чем те, которые вы бы использовали с B-Tree. Включая возможность построения B-дерева с использованием GiST.

IE: вы можете использовать GiST для индексации по географическим точкам или географическим областям, что вы не сможете сделать с помощью индексов B-Tree,

2
ответ дан 30 November 2019 в 12:14
поделиться

Индексы GiST в некоторой степени являются потерями, а это означает, что СУБД имеет дело с ложными срабатываниями / отрицаниями, то есть:

GiST индексы с потерями, потому что каждый документ представлен в индексе фиксированной длина подписи. Подпись генерируется путем хеширования каждого слова в случайный бит в n-битной строке, с все эти биты ИЛИ вместе с создать n-битную подпись документа. Когда два слова хешируют в один бит положение там будет ложное совпадение. Если все слова в запросе имеют совпадения (реальное или ложное), то строка таблицы должен быть найден, чтобы увидеть, если совпадение верно. b-деревья не имеют такого поведения, поэтому в зависимости от индексируемых данных между ними может быть некоторая разница в производительности.

См. поведение текстового поиска http://www.postgresql.org/docs/ 8.3 / static / textsearch-indexes.html и http://www.postgresql.org/docs/8.3/static/indexes-types.html для сравнения общего назначения.

3
ответ дан 30 November 2019 в 12:14
поделиться

По сути, все правы - btree является индексом по умолчанию, поскольку он работает очень хорошо. GiST - это несколько разные звери - это скорее «основа для написания типов индексов», чем сам по себе тип индекса. Вы должны добавить пользовательский код (на сервере), чтобы использовать его, но с другой стороны - они очень гибкие.

Как правило - вы не используете GiST, если тип данных, который вы используете, не скажет вам сделать это. Пример типов данных, использующих GiST: ltree (из contrib), tsvector (contrib / tsearch до 8.2, в ядре начиная с 8.3) и др.

Существует хорошо известное и довольно быстрое географическое расширение PostgreSQL - PostGIS ( http://postgis.refractions.net/ ), который использует GiST для своих целей.

5
ответ дан 30 November 2019 в 12:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: