Как повысить производительность моего SQL-скрипта
Привет надеюсь у тебя все хорошо
В настоящее время я сталкиваюсь с проблемой с производительностью моего SQL-скрипта, скрипт возвращает то, что требуется, когда количество данных достигает примерно 10 000 записей, то он начинает замедляться, иногда занимая до 2 минут, чтобы вернуть количество.
Как я мог бы улучшить свой сценарий, чтобы повысить скорость?
Таким образом, в основном то, что я пытаюсь достичь, заключается в том, что я пытаюсь сделать подсчет конкретного процесса(Pro_id), основанного на статусе
Чего я хотел добиться, так это разбить каждый статус на их собственный столбец, а не иметь их в своей собственной строке.
У меня есть встроенные подзапросы для этого, но как только количество данных начинает доходить до 10 000-12 000 записей, требуется некоторое время, чтобы вернуть данные, и я использую это для мониторинга состояния, поэтому должен быть как можно быстрее
Что я уже пробовал:
select int_desc "Interface", NVL((select count(*) from queue, "interface" where "interface" = interface_key and que_from_cde in ( select queue_key from queue WHERE que_filepath like '\\MyNet\TESTING\' || "interface" || batch || '\%' and pro_id = 36 and status_id = 3 ) and pro_id in (80) and status_id = 1 and que_interface_key = c.que_interface_key group by int_desc,status_id),0) as "Pending", NVL((select count(*) from queue,"interface" where que_interface_key = interface_key(+) and que_from_cde in ( select queue_key from queue WHERE que_filepath like '\\MyNet\TESTING\' || interface || batch|| '\%' and pro_id = 36 and status_id = 3 ) and pro_id in (80) and status_id = 2 and que_interface_key = c.que_interface_key group by int_desc,status_id),0) as "Processing", NVL((select count(*) from queue,"interface" where que_interface_key = interface_key(+) and que_from_cde in ( select queue_key from queue WHERE que_filepath like '\\MyNet\TESTING\' || interface || batch|| '\%' and pro_id = 36 and status_id = 3 ) and pro_id in (80) and status_id = 3 and que_interface_key = c.que_interface_key group by int_desc,status_id),0) as "Sucessful", NVL((select count(*) from queue,"interface" where que_interface_key = interface_key(+) and que_from_cde in ( select queue_key from queue WHERE que_filepath like '\\MyNet\TESTING\' || interface || batch|| '\%' and pro_id = 36 and status_id = 3 ) and pro_id in (80) and status_id = 4 and que_interface_key = c.que_interface_key group by int_desc,status_id),0) as "Failed", NVL((select count(*) from queue,"interface" where que_interface_key = interface_key(+) and que_from_cde in ( select queue_key from queue WHERE que_filepath like '\\MyNet\TESTING\' || interface || batch|| '\%' and pro_id = 36 and status_id = 3 ) and pro_id in (80) and status_id = 5 and que_interface_key = c.que_interface_key group by int_desc,status_id),0) as "Duplicate/In Progress" from queue c,"interface" where que_interface_key = interface_key(+) and queue_key in ( select queue_key from queue WHERE que_filepath like '\\MyNet\TESTING\' || interface || batch|| '\%' and pro_id = 36 ) and c.status_id = 3 group by int_desc,"interface"