У меня есть база данных prostgresql с таблицей:
tweets
|- id - bigint
|- text - character
|- created - date
PostgreSQL 9.5.14
В базе данных ~ 60 гигабайт твитов.В среднем 500.000 твитов в день.Максимальное количество твитов в течение самого дня - 1.200.000 твитов.Минимум 80.000.У меня есть ~ 600 дней данных.Я хочу выбрать, например, 50 000 случайных твитов из каждого дня в заданном интервале.
Мой текущий запрос:
SELECT * FROM (
SELECT id, text, created, row_number()
OVER (PARTITION BY created ORDER BY random()) AS rownum
FROM tweets
WHERE created BETWEEN to_date('2016-07-12','YYYY-MM-DD') AND to_date('2016-09-12','YYYY-MM-DD')
) tmp
WHERE rownum <=50000;
Проблема: выполнение запроса занимает некоторое время.Я бы хотел быть быстрее; -)
Вопрос: Есть ли более быстрый способ сделать это?
Моя идея: я создаю список, который включает в себя диапазоны идентификаторов для каждого дня.После этого я создаю список из 50 000 случайных идентификаторов на каждый день, который я использую для создания (длинного) запроса.