Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Необходимо сократить или оптимизировать запрос! [D7]


Страницы:   1 2 3 4

rayrom ©   (2005-07-26 15:44:00) 

Необходимо сократить или оптимизировать запрос:
SELECT s.desc, to_char(t.godto,'YYYY') yearto, count(gosnum) kolvo
FROM avto a, texosm t, amt_spr s
where a.NZA = t.NZA AND a.tip_avt = s.codename and t.keyuin = (SELECT MAX(keyuin)
          FROM TEXOSM
          WHERE a.NZA = texosm.NZA)
AND prin_avt = 1 and akt = 1 and cod = '10'
group by s.desc, godto

где amt_spr - справочник типов
texosm - таблица техосмотров (накопительная система запрос (SELECT MAX(keyuin) FROM TEXOSM WHERE a.NZA = texosm.NZA) определяет последнюю запись)
avto – таблица автотранспорта.
Через to_char(t.godto,'YYYY') я откусываю из дата год для вывода
count(gosnum) определяю количество транспорта
s.desc – название типа транспорта (их не много 16 штук)
prin_avt = 1 – определяю принадлежность (значения 0 или 1)
act = 1 – что он активный
cod = '10' – что нашего региона.
Так вот процесс идет очень долго, особенно по личному транспорту (~2 000 000 записей), и данные которые я получаю при группировке не получаются типа:
1 – 2005 – 250
2 – 2005 – 377
2 – 2004 – 400 …
а получаю типа такого
1 – 2005 – 120
1 – 2005 – 110
1 – 2005 – 20 …
Как это, во-первых, ускорить, а во-вторых, получить полную группировку!

З.Ы. В МуСКЛе я мог группировать по названию получаемого поля (select year(godto) as yearto …. group by yearto), а Ораклы не хотят, только по оригинальному названию поля! :(


rayrom   (2005-07-27 15:16:00) [41]

Да забыл добавить операционка Фря 5.1.


rayrom   (2005-07-27 15:15:00) [42]

На сервере в 100 км от меня база стоит Оракл версии 8.1.5.17 под Фрюхой, на двух Ксеонах, 1 ГБ озу, 60ГБх4 СКАЗИ винта в рейде, но при этом в том запросе что я сначала написал безбожно тормозит, он выполняется гдето от 3-15 минут в зависимости от загрузки сервера (клиентов много), а в мускуле такой же запрос выполняется от 20сек-2 мин (тоже от загрузки зависит) дык при етом комп на котором МуСКЛ стоит сел2.5, 512 МБ озу, винт 80 АТА 133!


ANB   (2005-07-27 15:12:00) [43]


> Sergey13 ©   (27.07.05 15:07) [32]
- хе, в 8i столько наворотов, что я до сих еще не все фичи знаю, а уж про 9-10 я вообще молчу.


Sergey13   (2005-07-27 15:12:00) [44]

2[30] rayrom ©   (27.07.05 14:21)
А какой тулзой ты пользуешься для SQLя? В PLSQLDeveloper например такая возможность есть по кнопке. В ТОАДе тоже.


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

2[30] rayrom ©   (27.07.05 14:21)

EXPLAIN PLAN

2[31] evvcom ©   (27.07.05 14:51)
А чего в 8 не хватает? И в какой 8? Даже 8 и 8i разные.


evvcom   (2005-07-27 14:51:00) [46]


> rayrom ©

Зря ты на Оракл наезжаешь. Ты его просто не знаешь. В конструкцию языка многие такие вещи добавили, о которых тебе и не снилось. Только для этого 8 версию в топку надо. Имхо. Уже 10 юзают, а ты все на 8 сидишь. Отсюда и ограничения. Уже даже 9 над 8 на порядок выше стоит, а что там в 10 даже не знаю.
А с MSSQL каким сравниваешь? А ты сравни сверстников.


rayrom   (2005-07-27 14:21:00) [47]

Ладно есть еще один вопрос есть ли в Ораклах инструкция еxplain(эта инструкция пере оператором selectв МуСКЛе показывает что где и как будет выбиратся, сколько, и какие индексы при этом используются)? Если есть, то вопрос мой мона закрывать, сам разберусь!


ANB   (2005-07-27 12:46:00) [48]


> rayrom ©   (27.07.05 12:24) [25]
Оракле рулит !!! Все проблемы в том, что ты на Оракле УЖЕ целых 3 месяца и его еще не выучил.


Sergey13   (2005-07-27 12:44:00) [49]

2[27] rayrom ©   (27.07.05 12:39)
>просто пока я в Инете я не могу подрубится к базе и проверить запрос
Но ты же говоришь про ошибку. Тебя и просили показать запрос и ошибку которую он выдал (я подозреваю это недопеределаный подзапрос с МАХом ругнулся).
Не хочешь - не надо. Я не настаиваю.


rayrom   (2005-07-27 12:39:00) [50]

Нет Сергей просто небольшое отступление, просто пока я в Инете я не могу подрубится к базе и проверить запрос (чето ВПН подглюкивает), может мне просто поподробней описать что собственно я хочу?


Sergey13   (2005-07-27 12:35:00) [51]

2[25] rayrom ©   (27.07.05 12:24)
Если ты хочешь холиваров, то я не хочу. Сходи на sql.ru в форум "Сравнение СУБД" если хочешь. Там этого добра - выше крыши.

А по сабжу - раз ты свой запрос тихаришь, как ты думешь тебе помогут?


rayrom   (2005-07-27 12:24:00) [52]


> Sergey13 ©   (27.07.05 12:18) [24]
> Какой "такой"?

[3] + [7]!!!
Извини Модератор может чтото из офтопа скажу!

Дело в том что я с многими людьми пообщался по поводу Ораклов (которые давно работают с ним) и они согласились с моим мнением что разрекламированная марка которая не стоит того чтобы его так превозносить по 5 бальной шкале он занимает 3+ максимум!


Sergey13   (2005-07-27 12:18:00) [53]

2[22] rayrom ©   (27.07.05 12:14)
>В том то и дело что не проходит такой вариан
Какой "такой"?

>Смотря что он танцует, в МуСКЛе я очень неплохо танцую,
Напомнает критику классического балета исполнителем народных танцев. 8-)


rayrom   (2005-07-27 12:16:00) [54]

Тем более что я в Ораклах только 3 месяца!


rayrom   (2005-07-27 12:14:00) [55]


> Sergey13

В том то и дело что не проходит такой вариан, возмущается Оракл, что слишком много значений!
Смотря что он танцует, в МуСКЛе я очень неплохо танцую, а ограниченность Ораклов меня уже достало (к примеру чтоб из даты вытащить год в числовом параметре нужно 2 преобразования делать в МуСКЛе 1 преобразование и т.п. и т.д.)!!! То что в МуСКЛ я могу за 2-3 минуты реализовать в Ораклах днями приходится сидеть и обсасывать варианты Ж(


Sergey13   (2005-07-27 12:05:00) [56]

2 [20] rayrom ©   (27.07.05 12:02)
Я тебе об этом и писАл в [3] и [7].

>(ИМХО долбанутый Оракл!)
Плохому танцору знаешь что мешает?


rayrom   (2005-07-27 12:02:00) [57]

Чесно говоря не нравится мне этот запрос, если логически рассуждать то нужно сделать в таком варианте-
Выбрать все НЗА для автомобилей по необходимым условиям, потом выбрать все последние записи для техосмотров в связки отобранных автомобильных НЗА, и то что получилосьсвязать со справочником и сгруппировать, аот только как энто реализовать чтото ума не приложу (ИМХО долбанутый Оракл!)


evvcom   (2005-07-27 11:37:00) [58]

Что значит "орет"? Код варианта и текст ошибки в студию. Я постоянно так делаю, и у меня не орет.


rayrom   (2005-07-27 11:27:00) [59]


> evvcom

Пробывал в таком варианте, орет что мол много значений!


evvcom   (2005-07-27 11:24:00) [60]

Блин, ну вынеси ты этот подзапрос из where, посмотри как в [8]. То же это или не то же зависит от того, как оптимизатор твой запрос разрулит. Не знаю, но, возможно, твой код оптимизатор не может оптимизировать так, чтобы выполнить за 2 скана, поэтому приходится для каждого t.keyuin выполнять отдельно подзапрос. Я не настаиваю, но возможно это так.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо