Как выбрать n случайных строк из каждого дня более производительным способом из postgresql-db? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть база данных 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 случайных идентификаторов на каждый день, который я использую для создания (длинного) запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...