Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Вниз

Необходимо сократить или оптимизировать запрос!   Найти похожие ветки 

 
Sergey13 ©   (2005-07-27 15:45) [40]

2 [35] rayrom ©   (27.07.05 15:15)
8.1.5 - не самый лучший релиз по отзывам.

Производительность запроса зависит не только от самого запроса, но и от того как настроен Оракл, какие индексы и т.д.

Ты так и не даешь последнюю редакцию твоего запроса.

2[39] rayrom ©   (27.07.05 15:38)
>> так что 1 гектар неплохо бы и расширить
>Хотелось бы тока денег не выделяютя!
Важно еще как этот гектар распахан.


 
rayrom ©   (2005-07-27 15:49) [41]

Кстати EXPLAIN PLAN - используется для получения плана, которому которому следует сервер базы данных при выполнении утвеждения СКЛ. Эта команда вставляет строку, описывающую пошаговый план выполнения, в указанную таблицу. (SQL Справочник программиста).
Это не то, мне нужно чтоб сервер показал как он выполняет выборку, вот что!


 
ANB ©   (2005-07-27 15:53) [42]


> Важно еще как этот гектар распахан.


> rayrom ©   (27.07.05 15:49) [41]

Да, кстати, настройки памяти тоже лучше выложи. На неправильных настройках можно до 50% времени потерять.


 
rayrom ©   (2005-07-27 15:55) [43]

Вот последняя редакция, она не отличается от первоначального, только тем что справчник последний связывается, и ксати чуть быстрее работает:
SELECT s.name, to_char(t.god_to,"YYYY") yearto, count(gos_num) kolvo
FROM avt_new a, tex_osm t, t_amt_spr s
where a.NZA = t.NZA and t.key_nid = (SELECT MAX(key_nid)
          FROM TEX_OSM
          WHERE a.NZA = tex_osm.NZA) AND a.tip_amt = s.codename
AND prin_amt = 1 and act = 1 and cod_mr = "18"
group by s.name, god_to


 
rayrom ©   (2005-07-27 15:57) [44]

2 ANB, каким макаром, у меня доступа к серверу та нету, что сбегать за 100 км к серверу и спросить у разработчика который за 300 км находится. Я ж говорил могу только SELECT исполнять и все мои привелегии!


 
Sergey13 ©   (2005-07-27 16:44) [45]

2[43] rayrom ©   (27.07.05 15:55)
А если нечто такое изобразить?
SELECT s.name, to_char(t.god_to,"YYYY") yearto, count(gos_num) kolvo
FROM
(select * from avt_new where prin_amt = 1 and act = 1 and cod_mr = "18") a, (SELECT NZA,MAX(key_nid) FROM TEX_OSM group by 1) t,
t_amt_spr s
where a.NZA = t.NZA AND a.tip_amt = s.codename
group by s.name, god_to

Подзапрос к техосмотрам можно ограничить еще и по авто.


 
rayrom ©   (2005-07-27 16:54) [46]

Выдает Invalid field name., ведь откуда будет братся to_char(t.god_to,"YYYY") yearto, если в выборке его нет?


 
Sergey13 ©   (2005-07-27 17:04) [47]

2[46] rayrom ©   (27.07.05 16:54)
Я ж тебе болванку дал как идею, а не рабочий запрос.


 
rayrom ©   (2005-07-27 17:06) [48]

Даа, такой бред получится, ладно потом поэкперементим (Все равно МуСКЛ рулез, а Оракл - Ракло)


 
ANB ©   (2005-07-27 17:31) [49]


> rayrom ©   (27.07.05 17:06) [48]
Наоборот !!! Плюс у ораклистов зарплата выше. Вот ты сколько получаешь ?


 
ANB ©   (2005-07-27 17:33) [50]


> Sergey13 ©   (27.07.05 16:44) [45]
- кстати, клевое решение проблемы, ща в копилочку себе скопирую . . .


 
rayrom ©   (2005-07-28 09:54) [51]

Пришол к такому варианту но чтото не соображу где ошибка:SELECT s.name, to_char(tt.god_to,"YYYY") yearto, count(a.gos_num) kolvo
FROM
(select * from avt_new where prin_amt = 1 and act = 1 and cod_mr = "18") a,
(SELECT NZA,MAX(key_nid) FROM TEX_OSM group by nza) t, tex_osm tt
t_amt_spr s
where a.NZA = t.NZA AND tt.key_nid = t.key_nid and a.tip_amt = s.codename
group by s.name, tt.god_to


 
Ольга   (2005-07-28 10:04) [52]

1. select gos_num from avt_new where ...
2. group by s.name, to_char(tt.god_to,"YYYY")


 
rayrom ©   (2005-07-28 10:11) [53]

Премного благодарен Ольга, ваше предложение убрало повторение годов по одному типу транспорта - group by s.name, to_char(tt.god_to,"YYYY")


 
Sergey13 ©   (2005-07-28 11:21) [54]

2[53] rayrom ©   (28.07.05 10:11)
А как c производительностью? Можно попробовать еще ограничить 2 подзапрос
(SELECT to.NZA,MAX(to.key_nid) FROM TEX_OSM to,avt_new av WHERE av.NZA = to.NZA and av.prin_amt = 1 and av.act = 1 and av.cod_mr = "18"
group by nza) t
И какие есть индексы на avt_new? Иногда перестановка местами условий в where (сделать порядок как в индексе) дает ощутимые результаты.

Попробуй вставить SELECT /*+ RULE */s.name, to_char


 
rayrom ©   (2005-07-28 11:39) [55]

2 Sergey13
Счас на мыло вышлю структуры авто и техосм, из Ембасадеро!


 
Sergey13 ©   (2005-07-28 11:49) [56]

2[55] rayrom ©   (28.07.05 11:39)
Что такое Ембасадеро? Не надо мне ничего слать. 8-)
Просто посмотри индексы и приведи порядок условий в where в соответствие с ними если возможно.
Так что с производительностью то? Лучше, хуже, также?


 
rayrom ©   (2005-07-28 11:51) [57]

Embarcadero ER/Studio, the award-winning data modeling application for logical and physical database design and construction. ER/Studio"s powerful, multi-level design environment addresses the everyday needs of database administrators, developers and data architects who build and maintain large, complex database applications. Its progressive interface and processes have been logically organized to effectively address the "ease-of-use" issues that have plagued data modeling tools for the past decade. The application facilitates your ability to create, understand and manage the mission-critical database designs within an enterprise. It offers strong logical design capabilities, bi-directional synchronization of logical and physical designs, automatic database construction and Java application generation, accurate reverse-engineering of databases, and powerful HTML-based documentation and reporting facilities.


 
Sergey13 ©   (2005-07-28 12:10) [58]

Блин. Не шибко информативная штука.
Насколько я понял, индекс у avt_new есть только по cod_mr. Вот и попробуй его поставить первым в условии. А желателен (для этого запроса) индекс по cod_mr+prin_amt+act+NZA.
Если этот запрос частый, то может и стОит подумать о создании такого индекса.
Так что с производительностью то запроса все таки?


 
rayrom ©   (2005-07-28 12:17) [59]

Запрос не частый примерно 1-3 раза вдень, ну и фиг сним, потом еще посмотрю, может чето переделаю! Спасибо всем за помощь!!!


 
Sergey13 ©   (2005-07-28 12:24) [60]

[48] rayrom ©   (27.07.05 17:06)
>(Все равно МуСКЛ рулез, а Оракл - Ракло)

2[59] rayrom ©   (28.07.05 12:17)
По тому, что ты уже раз 5 не ответил на вопрос о производительности я заключаю, что МуСкул занял таки подобающую позицию по отношению к Ораклу. 8-)


 
rayrom ©   (2005-07-29 09:17) [61]

Итог, последний вариант запроса который я оставляю -
SELECT s.name, to_number(to_char(t.god_to,"YYYY")) yearto, count(gos_num) kolvo
FROM avt_new a, tex_osm t, t_amt_spr s
where prin_amt = 1 and act = 1 and cod_mr = "18" AND a.NZA = t.NZA AND t.key_nid = (SELECT MAX(key_nid)
          FROM TEX_OSM
          WHERE a.NZA = tex_osm.NZA) AND a.tip_amt = s.codename

group by s.name, to_number(to_char(t.god_to,"YYYY"))

В таком варианте запрос выполняется на 10-20% быстрее!
А преобразование to_number(to_char(t.god_to,"YYYY")) для правильной сортировки.


 
rayrom ©   (2005-07-29 09:21) [62]

Хотя конечно преобразование to_number(to_char(t.god_to,"YYYY")) yearto выглядит как через ж..у, в МуСкуле проще Year(t.god_to) as yearto.
В принципе у любой РБД есть свои плюсы и мынусы, толького у кого чего больше и их значимость решает использование а не маркетинговая политика, и если это будет так то реляционки будут впереди планеты всей ;)


 
evvcom ©   (2005-07-29 09:23) [63]


> для правильной сортировки

А где она? И почему не оставить просто t.god_to? Клиент сам сможет отобразить только год. Дополнительная потеря времени, имхо.

> where prin_amt = 1 and act = 1 and cod_mr = "18"

Почему не используешь алиасы? Ведь кто потом будет разбираться, будет искать эти поля по всем таблицам и материть тебя по чем свет!


 
rayrom ©   (2005-07-29 09:30) [64]

2 evvcom Ты наверно не понял сам смысл запроса!
Запрос для начальства, ему нужно видеть (в DesicionCube), состояние прохождения техосмотров по типу транспорта и в каком году в группе типа - скока автобусов прошло в этом году и сколько еще не прошло осталось т.е. предыдущие года!
А так как таблица техосмотров накопительная то и идет выборка (SELECT MAX(key_nid)
         FROM TEX_OSM
         WHERE a.NZA = tex_osm.NZA)

для получения последнего техосмотра по данному транспорту, а как выглядит запрос ему и нафиг не надо (начальству), главное результат!!!


 
Sergey13 ©   (2005-07-29 09:38) [65]

2[61] rayrom ©   (29.07.05 09:17)
>Итог, последний вариант запроса который я оставляю -
>В таком варианте запрос выполняется на 10-20% быстрее!

Неужели to_number(to_char дало прирост в 10-20%? Это интересно. Других отличий от первого варианта я не нашел.


 
rayrom ©   (2005-07-29 09:44) [66]

2 Sergey13
Как я понял скорее всего это зависит от последовательности условий в WHERE, думаю что, условия обрабатываются с лева на право, т.е. соответственно изначально пошло ограничение на колличесво отобранных записей для дальнейших условий и связываний! А то что стоит в SELECT уже выполняется после условий хотя х.з.


 
Sergey13 ©   (2005-07-29 09:59) [67]

2[66] rayrom ©   (29.07.05 09:44)
А что с запросом из [51]? Там как было с шустростью? Просто интересно.

ЗЫ: Для просмотра статистики, кстати, в СКЛПлюсе можно набрать
set autotrace on
Будет и план и статистика.


 
k2 ©   (2005-07-29 09:59) [68]

rayrom ©   (29.07.05 09:44)
А преобразование to_number(to_char(t.god_to,"YYYY")) для правильной сортировки...I>
если только для сортировки то есть ещё trunc(in_date,"RRRR") возвращает дату
вроде в восьмерке уже был?


 
rayrom ©   (2005-07-29 10:03) [69]

2 k2 Да есть, уже проходили, не работает ошибку выдает!


 
rayrom ©   (2005-07-29 10:05) [70]

2 Sergey13 По поводу запроса [51], не работает пишет что неверное имя поля!


 
k2 ©   (2005-07-29 10:08) [71]

to [69] rayrom ©   (29.07.05 10:03)
ээ и што пишет?


 
Sergey13 ©   (2005-07-29 10:08) [72]

2[70] rayrom ©   (29.07.05 10:05)
Какое? Исправить что ли нельзя?


 
rayrom ©   (2005-07-29 10:11) [73]

2 k2, Sergey13
Не знаю, я через SQL Explorer работаю, другого нет, говорит что неверное имя и все а какое х.е.з.


 
Sergey13 ©   (2005-07-29 10:31) [74]

Попробуй через SQLPlus
и попробуй
group by s.name,  to_char(tt.god_to,"YYYY")


 
rayrom ©   (2005-07-29 10:42) [75]

Да нету у меня его, я через ОДБСишный драйвер работаю, я хотел Ораклы 9 купить (3 диска), дык пиратка тоже дорогая 15 у.е. для меня это накладно при зряплате в 110 у.е.
И скорее всего остановлюсь на последнем запросе [61]!


 
Sergey13 ©   (2005-07-29 10:45) [76]

2[75] rayrom ©   (29.07.05 10:42)
>Да нету у меня его
Что это за оракловый клиент без Плюса?



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.6 MB
Время: 0.013 c
3-1122968512
Magic
2005-08-02 11:41
2005.09.11
Поиск с учетом регистра


14-1124099751
Delphi Workman
2005-08-15 13:55
2005.09.11
Ищу удаленную работу на Delphi


14-1124296217
cyborg
2005-08-17 20:30
2005.09.11
:) обновление Windows Update


3-1122537548
Yexel
2005-07-28 11:59
2005.09.11
Help! Миграция SQLServer7 и Win2000->SQLServer2000 и Win2003


2-1123593226
DeepProg
2005-08-09 17:13
2005.09.11
ADOQuery.Open. SELECT





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский