Реализовать скрипт для бенчмарка Postgres

Евгений7 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
09.10.2019

В Postgres в Pgbench.Py реализован ряд бенчарков. Задача состоит в том, чтобы по аналогии реализовать ещё один бенчмарк, который будет ориентирован на nested-loop join'ы.

dict_1 – размер :scale * 100* id

* name – случайная строка текста длиной 64 байта

dict_2 – размер :scale * 1000

* id

* name – случайная строка текста длиной 64 байта

dict_3 – размер :scale * 10000

* id

* name – случайная строка текста длиной 64 байта

fact – размер :scale * 100000

* id

* dict_1_id – ссылка на dict_1, равномерное распределение

* dict_2_id – ссылка на dict_2, распределение по закону Зипфа с параметром 2

* dict_3_id – ссылка на dict_2, распределение по закону Зипфа с параметром 3

* value 1 – значение float8, распределённое по равномерному закону в интервале [0,1]

* value 2 – значение float8, распределённое по стандартному нормальному закону

В скрипт бенчмарка должно входить 3 запроса

SELECT f.*, d1.name, d2.name, d3.nameFROM

fact f

JOIN dict_1 d1 ON d1.id = f.dict_1_id

JOIN dict_2 d2 ON d2.id = f.dict_2_id

JOIN dict_3 d3 ON d3.id = f.dict_3_id

WHERE f.id > :id

ORDER BY id

SELECT f.*, d1.name, d2.name, d3.nameFROM

fact f

JOIN dict_1 d1 ON d1.id = f.dict_1_id

JOIN dict_2 d2 ON d2.id = f.dict_2_id

JOIN dict_3 d3 ON d3.id = f.dict_3_id

WHERE f.value_1 > :value_1

ORDER BY value_1

SELECT f.*, d1.name, d2.name, d3.nameFROM

fact f

JOIN dict_1 d1 ON d1.id = f.dict_1_id

JOIN dict_2 d2 ON d2.id = f.dict_2_id

JOIN dict_3 d3 ON d3.id = f.dict_3_id

WHERE f.value_2 > :value_2

ORDER BY value_2

где :id должно генерироваться по равномерному распределению, а :value_1 и :value_2 также как и при заполнении таблицы. Оставляйте заявки, кто действительно разбирается.