У меня есть представление под названием Employee_All.
Это приносит данные из двух (от одной до многих) таблиц с помощью соединения, где несколько записей помещаются в одну строку и отображаются у всех сотрудников. One
имеет 30000 записей, а many
имеет удвоение до One
.
Следующие простые запросы: 1 se c для возврата 50 записей
SELECT x.*, (SELECT 'NOIFS' FROM DUAL) as TYPE FROM Employee_ALL x
Когда я добавляю условие и он возвращает 50 записей за 1,81 секунды
SELECT x.*, (SELECT 'NOIFS' FROM DUAL) as TYPE FROM Employee_ALL x
WHERE (x.endDate > sysdate-90 OR x.endDate is null) OR x.lastUpdated >= sysdate-30
fetch first 50 rows only
Теперь есть подзапрос, и он возвращает 50 записей за: 4,14 секунды
SELECT x.*, (SELECT USERID FROM Employee_ALL z WHERE UPPER(EMPLOYEEID)=x.leaderEmployeeId ) as managersuserid, (SELECT 'NOIFS' FROM DUAL) as TYPE
FROM Employee_ALL x
WHERE (x.endDate > sysdate-90 OR x.endDate is null) OR x.lastUpdated >= sysdate-30
fetch first 50 rows only
Есть ли способ настроить последний запрос таким образом что он возвращает результаты за секунды, поскольку мне нужно запустить этот запрос для 30 000 записей? (Загрузка данных занимает около 10-15 минут) любое другое предложение
Примеры данных, например:
EmpID ManagerEmpID NAME UserID
1 2 Harry Har
2 Garry Manager Gar
3 2 Cherry Char