У меня есть запрос на получение информации о клиентах, и я добавляю функцию max()
, чтобы найти самую последнюю дату заказа. Без агрегата запрос занимает 0,23 секунды для запуска, но с ним требуется 12,75 секунды.Оптимизация агрегированной функции в Oracle
Вот запрос:
SELECT U.SEQ, MAX(O.ORDER_DATE) FROM CUST_MST U
INNER JOIN ORD_MST O ON U.SEQ = O.CUST_NUM
WHERE U.SEQ = :customerNumber
GROUP BY U.SEQ;
ORD_MST
представляет собой таблицу с 890000 записей.
Есть ли более эффективный способ получить эту функциональность?
EDIT: Для записи ничего особенного не мешает мне запускать два запроса и присоединяться к ним в моей программе. Мне кажется невероятно странным, что такой простой запрос займет много времени. В этом случае гораздо проще/проще позволить базе данных объединять информацию, но это не единственный способ для меня сделать это.
EDIT 2: В соответствии с запросом, вот планы по запросам, которые я ссылаюсь в этом вопросе.
Если вы запускаете его дважды подряд, это займет столько же времени во второй раз? –
@ DanBracuk Это довольно непротиворечиво. В лучшем случае я вижу разницу в 2 секунды. – Logarr
Можете ли вы добавить планы запросов для обоих вопросов на вопрос? Кроме того, какие индексы в настоящее время включены в обе таблицы? –