Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Луший индекс для date_start/date_end / 10 сообщений из 10, страница 1 из 1
10.12.2014, 16:27:35
    #38830419
Hacker-CB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
Приветствую!

Есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE devices (
  id SERIAL,
  mac_addr MACADDR,
  date_start TIMESTAMP(0) WITH TIME ZONE DEFAULT now() NOT NULL,
  date_end TIMESTAMP(0) WITH TIME ZONE DEFAULT 'infinity'::timestamp with time zone NOT NULL
)



Какой лучше индекс сделать для запросов следующего вида?

Код: sql
1.
SELECT id FROM devices WHERE mac_addr='aa:bb:cc:dd:ee:ff' AND NOW() BETWEEN date_start AND date_end;
...
Рейтинг: 0 / 0
10.12.2014, 16:32:37
    #38830428
/\/\/\/\/\/\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
Hacker-CB,

В Вашей постановке вопроса лучший индекс - его отсутствие.

Что не устраивает в текущей работе БД?
...
Рейтинг: 0 / 0
10.12.2014, 16:49:30
    #38830465
кхм
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
/\/\/\/\/\/\,

у тс уже может быть нужный индекс, ели он наложил exclude .
...
Рейтинг: 0 / 0
10.12.2014, 17:15:17
    #38830501
Hacker-CB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
MAC адрес уникален в единицу времени.
Может быть все-таки какой-либо индекс ускорит производительность?
...
Рейтинг: 0 / 0
10.12.2014, 17:26:39
    #38830512
/\/\/\/\/\/\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
кхм/\/\/\/\/\/\,

у тс уже может быть нужный индекс, ели он наложил exclude .

Ога. Начинается занимательное рассматривание хрустального шара.

Hacker-CB MAC адрес уникален в единицу времени.
Может быть все-таки какой-либо индекс ускорит производительность?

Главный вопрос:
Что не устраивает в текущей производительности?
Например: сейчас запрос выполняется за один час. Меня это не устраивает, хочу чтобы выполнялся за 15 минут.

Если нужны какие-то телодвижения, то укажите:
- объем таблицы в записях
- селективность по полям-кандидатам на индекс.

Кстати, "уникальность в единицу времени" намекает на множество пикантных обстоятелств. Нужно взять хрустальный шар побольше.
...
Рейтинг: 0 / 0
10.12.2014, 17:33:16
    #38830519
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
Hacker-CB,

В общем я бы начал с прочтения
http://www.postgresql.org/docs/9.3/interactive/rangetypes.html

т.е. для начала вам надо просто сменить формат хранения end/start
а дальше под это можно будет сообразить индекс.


--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
10.12.2014, 17:39:10
    #38830524
Hacker-CB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
Maxim Boguk,

За range спасибо, почитаю.

/\/\/\/\/\/\,

Количество записей в таблице - около 100тыс.
Дело не в том что не устраивает что-то в текущей производительности. Вопрос в том, можно ли построить индекс который поможет улучшить производительность.
...
Рейтинг: 0 / 0
10.12.2014, 17:44:18
    #38830531
/\/\/\/\/\/\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
Hacker-CB,

Вы верите в магию?
Волшебный индекс решит все Ваши проблемы, которые еще даже и не возникли?
...
Рейтинг: 0 / 0
10.12.2014, 17:59:45
    #38830556
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
Hacker-CB,

покажите вывод

Код: sql
1.
2.
3.
select count(*), count(distinct mac_addr) from devices;

select count(*) from devices group by mac_addr order by 1 desc limit 10;
...
Рейтинг: 0 / 0
10.12.2014, 20:09:38
    #38830671
Константин Евтеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Луший индекс для date_start/date_end
для данного случая подойдет btree_gist
http://www.postgresql.org/docs/9.1/static/btree-gist.html

Код: plsql
1.
2.
3.
4.
 CREATE INDEX devices_idx
  ON devices
  USING gist 
  (mac_addr , tstzrange(date_start, date_end) );


Код: plsql
1.
select * From devices  where mac_addr  = 'a1:bb:c3:dd:ee:ff' and tstzrange(date_start, date_end) @> '2028-08-19 20:56:53.372':: TIMESTAMP WITH TIME ZONE 
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Луший индекс для date_start/date_end / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]