|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Alex G. Bodnar 2:5020/400 23 Jan 2003 13:22:05 To : All Subject : PostgreSQL непонятки с индексами --------------------------------------------------------------------------------
Привет всем.
Если создать таблицу с полем типа int,
построить по данному полю индекс,
то выборка с использованием данного поля идет нормально,
индекс используется для выборки
Пример:
CREATE TABLE t1 (f1 int);
CREATE INDEX i1 on t1 (f1);
EXPLAIN SELECT * FROM t1 where f1 = 10;
QUERY PLAN
--------------------------------------------------------------
Index Scan using i1 on t1 (cost=0.00..17.07 rows=5 width=4)
Index Cond: (f1 = 10)
Hо если все сделать тоже самое, но с типом bigint, то
получаем.
CREATE TABLE t1 (f1 bigint);
CREATE INDEX i1 on t1 (f1);
EXPLAIN SELECT * FROM t1 where f1 = 10;
QUERY PLAN
---------------------------------------------------
Seq Scan on t1 (cost=0.00..22.50 rows=5 width=8)
Filter: (f1 = 10)
Это как-то можно решить?
Hеобходимо использование индекса и типа bigint.
Я в принципе нашел только одно решение, создавать
таблицу с двумя полями типа integer и строить индекс
по двум полям, но хочется по человечески.
Пробовал и вставить много записей, и произвести много
выборок, и в разное время производил анализ базы данных
(vacuumdb -z -v testdb), но ни чего не помогает. Индекс
по полю bigint ведется, но не используется при выборках.
Может кто-то сталкивался и знает решение данной проблемы.
Версия PostgreSQL 7.3.1 on i686-pc-linux-gnu, compiled by GCC 2.96
--- ifmail v.2.15dev5
* Origin: Unknown (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/348f416c3fa.html, оценка из 5, голосов 10
|