Вы не.
@action
предназначен только для ViewSet
, GenericViewSet
, ModelViewSet
, все они найдены в rest_framework.viewsets
.
В двух словах: Индексы B-Tree работают лучше, но индексы GiST более гибкие. Обычно вам нужны индексы B-Tree, если они будут работать для вашего типа данных. Недавно в списках PG появилось сообщение об огромном падении производительности при использовании индексов GiST; ожидается, что они будут медленнее, чем B-деревья (такова цена гибкости), но не , что намного медленнее ... работа, не индексируется в btree. ... можно было бы полностью ожидать, что btree превзойдет GIST для btree-indexable случаев. я думаю Важным моментом здесь является то, что он выигрывает в пару раз сто; это довольно ужасно, и может указывать на некоторую реализацию проблема.
GiST являются более общими показателями. Вы можете использовать их для более широких целей, чем те, которые вы бы использовали с B-Tree. Включая возможность построения B-дерева с использованием GiST.
IE: вы можете использовать GiST для индексации по географическим точкам или географическим областям, что вы не сможете сделать с помощью индексов B-Tree,
Индексы 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 для сравнения общего назначения.
По сути, все правы - btree является индексом по умолчанию, поскольку он работает очень хорошо. GiST - это несколько разные звери - это скорее «основа для написания типов индексов», чем сам по себе тип индекса. Вы должны добавить пользовательский код (на сервере), чтобы использовать его, но с другой стороны - они очень гибкие.
Как правило - вы не используете GiST, если тип данных, который вы используете, не скажет вам сделать это. Пример типов данных, использующих GiST: ltree (из contrib), tsvector (contrib / tsearch до 8.2, в ядре начиная с 8.3) и др.
Существует хорошо известное и довольно быстрое географическое расширение PostgreSQL - PostGIS ( http://postgis.refractions.net/ ), который использует GiST для своих целей.