Реализовать скрипт для бенчмарка Postgres
В 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 также как и при заполнении таблицы. Оставляйте заявки, кто действительно разбирается.