Я написал запрос, который выбирает запись NULL DAYS (Occasion, weekoff, чрезвычайные выходные), позже я реализовал то же самое в графическом интерфейсе, так что мой администратор может видеть список, загрузка данных займет несколько минут,даже в моем SQL-разработчике.
Как сократить время выполнения?
Вот запрос
SELECT *
FROM
(SELECT s.null_id ,
STRING_AGG(DISTINCT s.city) city_id ,
STRING_AGG(DISTINCT c.name) cityName ,
STRING_AGG(DISTINCT s.location) location_id ,
STRING_AGG(DISTINCT l.name) locationName ,
STRING_AGG(DISTINCT s.sublocation) sublocation_id ,
STRING_AGG(DISTINCT sl.name) sublocationName ,
s.department ,
s.fromtodate ,
s.todate ,
s.remark ,
s.status ,
s.update_date ,
s.update_by ,
s.delete_status ,
s.update_by_name ,
uu.name updatedBy ,
row_number() OVER(ORDER BY s.null_id) rnum
FROM nullday s
LEFT OUTER JOIN userdetail uu
ON s.update_by = uu.user_id
LEFT OUTER JOIN city c
ON ','
|| s.city
|| ',' LIKE '%,'
||c.CITY_ID
||',%'
LEFT OUTER JOIN location l
ON ','
|| s.location
|| ',' LIKE '%,'
||l.LOCATION_ID
||',%'
LEFT OUTER JOIN sublocation sl
ON ','
|| s.sublocation
|| ',' LIKE '%,'
||sl.SUBLOCATION_ID
||',%'
WHERE s.null_id = s.null_id
GROUP BY s.null_id,
s.location,
s.sublocation,
s.department,
s.fromtodate,
s.todate,
s.remark ,
s.status,
s.update_date,
s.update_by,
s.delete_status,
s.update_by_name,
uu.name
ORDER BY s.fromtodate ASC
) mytbl
WHERE rnum < :max_val
AND rnum > :min_val
Я не могу понять, является ли joins
или LISTAGG
занимает время для загрузки запроса.
NULLDAY Формат данных таблицы
![enter image description here](https://i.stack.imgur.com/0XTgT.png)