![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Необходимо сократить или оптимизировать запрос! [D7]
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 выполнять отдельно подзапрос. Я не настаиваю, но возможно это так.