powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Луший индекс для date_start/date_end
10 сообщений из 10, страница 1 из 1
Луший индекс для date_start/date_end
    #38830419
Hacker-CB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!

Есть таблица:
Код: 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
Луший индекс для date_start/date_end
    #38830428
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hacker-CB,

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

Вы верите в магию?
Волшебный индекс решит все Ваши проблемы, которые еще даже и не возникли?
...
Рейтинг: 0 / 0
Луший индекс для date_start/date_end
    #38830556
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Луший индекс для date_start/date_end
    #38830671
Фотография Константин Евтеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для данного случая подойдет 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
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Луший индекс для date_start/date_end
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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