Postgres выберите работу в 3 раза быстрее, чем функция с этим выбором - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть SELECT в Postgres:

SELECT DISTINCT ON (price) price, quantity, is_ask, final_update_id
                 FROM (SELECT *
                       FROM ((SELECT price, quantity, is_ask, book_depth.final_update_id
                              FROM order_depth
                                       LEFT JOIN book_depth ON book_depth_id = book_depth.id
                              WHERE book_depth_id IN (SELECT id
                                                      FROM book_depth
                                                      WHERE final_update_id > (SELECT last_update_id
                                                                               FROM order_book
                                                                               WHERE symbol_name = 'XRPRUB'
                                                                               ORDER BY last_update_id DESC
                                                                               LIMIT 1)
                                                        AND symbol_name = 'XRPRUB'))
                             UNION
                             (SELECT price, quantity, is_ask, order_book_id
                              FROM "order"
                              WHERE order_book_id = (SELECT id
                                                     FROM order_book
                                                     WHERE symbol_name = 'XRPRUB'
                                                     ORDER BY last_update_id DESC
                                                     LIMIT 1))
                             ORDER BY final_update_id DESC) AS t) AS t1
                 ORDER BY price, final_update_id DESC;

Работает около 20 секунд. Но когда я создаю функцию с этим выбором, эта функция работает около 1 мин 40 секунд. Может кто-нибудь объяснить мне это нормально или я где-то ошибаюсь?

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