Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/35: Рейтинг темы: голосов - 35, средняя оценка - 4.66
2 / 2 / 0
Регистрация: 17.03.2010
Сообщений: 83
1

Сравнение плана выполнения

23.04.2012, 08:20. Показов 7198. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста разобраться с планом выполнения SQL. Есть 2 SQL, 2 их плана выполнения. Пользуюсь PL/SQL Developer. Какой из них лучше и почему? Что означает каждое поле плана выполнения? На что обращать внимание больше?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2012, 08:20
Ответы с готовыми решениями:

Определить процент выполнения плана по каждому месяцу и процент выполнения годового плана
Известны плановый и фактический выпуск продукции (в тоннах) по месяцам года. Определить процент...

Определить процент выполнения плана
Известен плановый P и фактический F показатели выпуска продукции предприятием. Определить процент...

Подсчет выполнения плана продаж в упаковках
Всем привет! Подскажите как можно посчитать % выполнения. В ассортименте магазина имеется три...

Расчет премии по факту выполнения плана
Здравствуйте всем. Необходимо помощь в составлении формулы. Суть такая, необходимо в ячейке...

11
2 / 2 / 0
Регистрация: 17.03.2010
Сообщений: 83
23.04.2012, 08:24  [ТС] 2
Скрины планов!
Миниатюры
Сравнение плана выполнения   Сравнение плана выполнения  
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
23.04.2012, 08:49 3
Цитата Сообщение от Sergei007 Посмотреть сообщение
Что означает каждое поле плана выполнения?
Это вам лучше доку почитать. Слишком много всего.
Цитата Сообщение от Sergei007 Посмотреть сообщение
На что обращать внимание больше?
Смотреть в первую очередь чтобы не было full access для больших таблиц. И смотреть используются ли индексы, которые предполагалось использовать при написании запроса.
1
2 / 2 / 0
Регистрация: 17.03.2010
Сообщений: 83
23.04.2012, 09:00  [ТС] 4
Хотелось бы чтобы поточнее кто нибудь рассказал про COST и CARDINALITY.

Индексы используются те которые нужно.
Проблема состоит в том что запрос очень долго исполняется.
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
23.04.2012, 09:09 5
Цитата Сообщение от Sergei007 Посмотреть сообщение
Хотелось бы чтобы поточнее кто нибудь рассказал про COST и CARDINALITY.
Дж. Льюис "Основы стоимостной оптимизации" или гугл, смысла нет в 100ый раз все расписывать, что уже написано. Если кратко, COST - время, CARDINALITY - число извлеченных строк.
Цитата Сообщение от Sergei007 Посмотреть сообщение
Индексы используются те которые нужно.
Проблема состоит в том что запрос очень долго исполняется.
Покажите сам текст запроса.
1
2 / 2 / 0
Регистрация: 17.03.2010
Сообщений: 83
23.04.2012, 09:17  [ТС] 6
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
SELECT sel1.*, 
 
       NVL(GetBeginTimeWaitLoad(sel1.vehid,sel1.timeload,XLOAD, YLOAD),sel1.timeload) AS     TIMESTOPLOAD,
  
       NVL((SELECT 
                  MIN(simpletransitions.TIMEGO)
            FROM simpletransitions
            WHERE sel1.vehid = simpletransitions.VEHID
                  AND simpletransitions.TIMEGO > sel1.timeload
                  AND sel1.timeunload > simpletransitions.TIMEGO
                  AND ShiftFinishTime >= simpletransitions.TIMEGO),sel1.timeload) AS TIMEGOLOAD,
 
       NVL((SELECT 
                  MAX(simpletransitions.TIMESTOP)
            FROM simpletransitions
            WHERE sel1.vehid = simpletransitions.VEHID
                  AND sel1.timeunload > simpletransitions.TIMESTOP
                  AND simpletransitions.TIMEGO > sel1.TIMELOAD
                  AND ShiftFinishTime >= simpletransitions.TIMESTOP), sel1.timeunload) AS TIMESTOPUNLOAD,
 
       NVL((SELECT 
                  MIN(simpletransitions.TIMEGO)
            FROM simpletransitions
            WHERE sel1.vehid = simpletransitions.VEHID
                  AND simpletransitions.TIMEGO > sel1.timeunload
                  AND ShiftFinishTime >= simpletransitions.TIMEGO),sel1.timeunload) AS TIMEGOUNLOAD
  
 
FROM 
     (SELECT VEHID, Vehtrips.TIMELOAD, Vehtrips.TIMEUNLOAD, Vehtrips.SHOVID, Vehtrips.UNLOADID, 
             GetShiftStartTime(TO_DATE(&ParamDate,'dd.mm.yy')+PlusTime.HoursAdd, 12) AS ShiftStartTime,
             GetShiftFinishTime(TO_DATE(&ParamDate,'dd.mm.yy')+PlusTime.HoursAdd,12) AS ShiftFinishTime,
             Vehtrips.XLOAD,
             Vehtrips.YLOAD,
             Vehtrips.XUNLOAD,
             Vehtrips.YUNLOAD,
             NVL(LAG(Vehtrips.TIMEUNLOAD,1) OVER (PARTITION BY VEHID ORDER BY LENGTH(VEHID), VEHID, TIMELOAD),Vehtrips.TIMELOAD-1) LastTimeUnload 
  
  
      FROM Vehtrips,
           (
             SELECT TO_NUMBER( Decode ( TO_CHAR(&ParamShift), '1', 9/24, '2', 22/24 )) AS HoursAdd FROM dual
           ) PlusTime
      WHERE
             Vehtrips.TIMELOAD > GetShiftStartTime(TO_DATE(&ParamDate,'dd.mm.yy')+PlusTime.HoursAdd, 12)
             AND
             GetShiftFinishTime(TO_DATE(&ParamDate,'dd.mm.yy')+PlusTime.HoursAdd,12) > Vehtrips.TIMEUNLOAD  
      ORDER BY LENGTH(VEHID), VEHID, TIMELOAD
      ) sel1
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
23.04.2012, 09:28 7
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
NVL((SELECT 
                  MIN(simpletransitions.TIMEGO)
            FROM simpletransitions
            WHERE sel1.vehid = simpletransitions.VEHID
                  AND simpletransitions.TIMEGO > sel1.timeload
                  AND sel1.timeunload > simpletransitions.TIMEGO
                  AND ShiftFinishTime >= simpletransitions.TIMEGO),sel1.timeload) AS TIMEGOLOAD,
 
       NVL((SELECT 
                  MAX(simpletransitions.TIMESTOP)
            FROM simpletransitions
            WHERE sel1.vehid = simpletransitions.VEHID
                  AND sel1.timeunload > simpletransitions.TIMESTOP
                  AND simpletransitions.TIMEGO > sel1.TIMELOAD
                  AND ShiftFinishTime >= simpletransitions.TIMESTOP), sel1.timeunload) AS TIMESTOPUNLOAD,
 
       NVL((SELECT 
                  MIN(simpletransitions.TIMEGO)
            FROM simpletransitions
            WHERE sel1.vehid = simpletransitions.VEHID
                  AND simpletransitions.TIMEGO > sel1.timeunload
                  AND ShiftFinishTime >= simpletransitions.TIMEGO),sel1.timeunload) AS TIMEGOUNLOAD

Попробуйте переписать запрос что-бы эти агрегации считались за один запрос. А потом приджойните этот запрос к данным.
+
ваши функции GetShiftStartTime, GetShiftFinishTime непонятно сколько выполняются.
1
2 / 2 / 0
Регистрация: 17.03.2010
Сообщений: 83
23.04.2012, 09:40  [ТС] 8
Я просто не представляю как их можно в один запрос запихнуть! Может подскажете например каким образом!
А функции ГЕТ выполняются быстро. ТК внутренний запрос исполняеся за 3 сек. выбирая 665 строк.
0
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
23.04.2012, 09:55 9
SQL
1
2
3
4
5
6
SELECT
  MIN(CASE WHEN ... THEN  END), ...
FROM
  simpletransitions, sel1
WHERE 
  sel1.vehid = simpletransitions.VEHID AND ...
То что однозначно быстрее будет гарантии само сабой дать не могу. Тут пальцем в небо.
1
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
23.04.2012, 13:03 10
Цитата Сообщение от Sergei007 Посмотреть сообщение
А функции ГЕТ выполняются быстро.
В SQL запросе лучше не использовать функции.
Дело даже не во времени выполнения функции, а в переключении контекста между SQL и PL/SQL.

Добавлено через 10 минут
функции в условии это тоже беда))
0
2 / 2 / 0
Регистрация: 17.03.2010
Сообщений: 83
24.04.2012, 18:57  [ТС] 11
Видимо вы жесткий сторонник чистого SQL? Не так ли=)
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
25.04.2012, 12:24 12
Oracle PL/SQL дляпрофессионалов:практические решения
Коннор МакДональд, Хаим Кац, Кристофер Бек,Джоел Кальман, Дэвид Нокс

He используйте PL/SQL вместо SQL.
PL/SQL раз-рабатывался как расширение SQL (и всегда им был), т.е. как средство, которое мож-
но использовать, когда задачу невозможно решить с помощью SQL
0
25.04.2012, 12:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2012, 12:24
Помогаю со студенческими работами здесь

Проектирование ИС для учёта выполнения плана товарооборота
ИС и БД должны быть разработана в MS Access в виде форм, запросов и таблиц. Используются линейные,...

Расчет премии в Excel в зависимости от % выполнения плана
Помогите, пожалуйста, рассчитать премиальный фонд предприятий, перевыполнивших план более чем на...

Получить процент выполнения плана каждой линией
Дорогие Программисты! пишу к Вам не от лени, а от безысходности. завтра зачет. одну задачу решить...

Расчет бонуса с корреляцией в зависимости от процента выполнения плана
Добрый день! Выплачивается бонус в размере 20% от квартальной зарплаты при выполнении плана на 85%...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru