Прежде всего, вам не нужен BILIGILER встроенного вида просто выбрать несколько столбцов из таблицы COMMT020, вы будете прекрасно выбирающей из этой таблицы непосредственно:
SELECT ROUND(AVG(et_gsm_s1nyal)) AS sinyal,
mahalle_kodu,ilce_kodu,sebeke
FROM (
SELECT et_gsm_s1nyal,
sozlesme_no,
SUBSTR(et_operator,1,5) AS sebeke
FROM thkol316old
WHERE tarih >= ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1)
AND tarih < TRUNC(SYSDATE, 'MM')
) okuma, commt020
WHERE okuma.sozlesme_no = commt020.sozlesme_no
GROUP BY mahalle_kodu,ilce_kodu,sebeke
/
Тогда, давайте перепишем join, используя выражение ANSI join. Я предпочитаю, чтобы ANSI присоединяется к старым объединениям в стиле Oracle, потому что они позволяют отделить условия соединения от условий фильтрации, тем самым обеспечивая большую ясность в том, что происходит на самом деле. Кроме того, это хороший стиль для назначения псевдонимов таблицам и четкое указание, какие столбцы мы выбираем из этой таблицы.
SELECT ROUND(AVG(o.et_gsm_s1nyal)) AS sinyal,
c.mahalle_kodu, c.ilce_kodu, o.sebeke
FROM (
SELECT th.et_gsm_s1nyal,
th.sozlesme_no,
SUBSTR(th.et_operator,1,5) AS sebeke
FROM thkol316old th
WHERE th.tarih >= ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1)
AND th.tarih < TRUNC(SYSDATE, 'MM')
) okuma o
JOIN commt020 c ON o.sozlesme_no = c.sozlesme_no
GROUP BY c.mahalle_kodu, c.ilce_kodu, o.sebeke
/
Теперь оно яснее, чем остальное встроенное изображение избыточно.Несмотря на то, что трудно сказать, не зная подробностей этих таблиц, но вы, вероятно, будет лучше «разворачивает», что вложенное представление и заменить его прямой присоединиться:
SELECT ROUND(AVG(th.et_gsm_s1nyal)) AS sinyal,
c.mahalle_kodu,
c.ilce_kodu,
SUBSTR(th.et_operator,1,5) AS sebeke
FROM commt020 c
JOIN thkol316old th ON c.sozlesme_no = th.sozlesme_no
WHERE th.tarih >= ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1)
AND th.tarih < TRUNC(SYSDATE, 'MM')
GROUP BY c.mahalle_kodu, c.ilce_kodu, SUBSTR(th.et_operator,1,5)
/
К сожалению оптимизации этого запроса дополнительно требует дополнительной информации, таких как:
- Новый план выполнения.
- Версия Oracle, которую вы используете.
- Число строк в таблицах THKOL316OLD и COMMT020.
- Какие индексы существуют на этих таблицах.
Ответ №1: Проверить план выполнения. Затем выполните соответствующие действия ... (Чтобы получить план выполнения, нажмите F10 в разработчике SQL, как вы упомянули, используя это) – ppeterka
Я пробовал, но я не понимаю, что я должен делать? Стоимость составляет 7547 – ofince
Не общая стоимость важна, а как суммируются дополнительные затраты. Вы также можете вставить текст здесь ... Кроме того, вы можете проверить дерево, часть, которая является высокой стоимостью, означает, что есть медлительность ... – ppeterka