Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

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

 
rayrom ©   (2005-07-26 15:44) [0]

Необходимо сократить или оптимизировать запрос:
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), а Ораклы не хотят, только по оригинальному названию поля! :(


 
ANB ©   (2005-07-26 15:50) [1]

1. Индексы.
2.
> Ораклы не хотят, только по оригинальному названию поля!
> :(
- используй вложенный запрос. И будет тебе счастье.


 
Fay ©   (2005-07-26 15:56) [2]

2 rayrom ©   (26.07.05 15:44)
Дай скрипты для создания таблиц - будет проще ваять.


 
Sergey13 ©   (2005-07-26 15:56) [3]

А индексы какие есть? А план что говорит?
Я бы в первую очередь вместо
FROM avto a
попробовал сделать
FROM (select * from avto where prin_avt = 1 and akt = 1 and cod = "10" ) a


 
rayrom ©   (2005-07-26 16:03) [4]

К сожелению база не моя, и менять или что либо создавать не имею никакого права, только выборки и все!


 
Sergey13 ©   (2005-07-26 16:05) [5]

2[4] rayrom ©   (26.07.05 16:03)
А кто тебя об этом просил?


 
rayrom ©   (2005-07-26 16:09) [6]

2 Sergey13 ©   (26.07.05 16:05)
Если есть Аська кинь на мыло все объясню!!!


 
Sergey13 ©   (2005-07-26 16:18) [7]

2[6] rayrom ©   (26.07.05 16:09)
Нет ее у меня.
У тебя похоже подзапрос с МАХ-ом делается на каждую запись из авто. Я предложил сначала ограничить ее, а потом соединять. Можно попробовать выбрать предварительно все из TEXOSM. типа
SELECT NZA,MAX(keyuin) FROM TEXOSM group by 1
и заделать это вместо TEXOSM во From головного запроса.


 
evvcom ©   (2005-07-26 16:59) [8]

SELECT
 s.desc,
 to_char(t.godto,"YYYY") yearto,
 count(gosnum) kolvo
FROM avto a
 INNER JOIN texosm t
   ON t.NZA = a.NZA
 INNER JOIN amt_spr s
   ON s.codename = a.tip_avt
 INNER JOIN (
   SELECT
     to.NZA,
     MAX(to.keyuin) keyuin
   FROM TEXOSM to
   GROUP BY to.NZA
 ) q
   ON q.NZA = a.NZA AND
      q.keyuin = t.keyuin
where prin_avt = 1 and akt = 1 and cod = "10" -- здесь тоже используй синонимы, нагляднее
group by s.desc, t.godto

Примерно так, писал прямо здесь, должно работать.


 
rayrom ©   (2005-07-27 10:17) [9]

2 evvcom
Хорошо еслиб все так просто, только про INNER JOIN придется забыть, версия ораклов 8, там JOIN ни в каком виде нету!


 
Sergey13 ©   (2005-07-27 10:24) [10]

[9] rayrom ©   (27.07.05 10:17)
>Хорошо еслиб все так просто, только про INNER JOIN придется забыть, версия ораклов 8, там JOIN ни в каком виде нету!

(+)


 
rayrom ©   (2005-07-27 10:31) [11]

2 Sergey13
Об єтом поподробнее плз, у меня нет нормальной доки, только по версии 7.


 
ANB ©   (2005-07-27 10:32) [12]


> Sergey13 ©   (27.07.05 10:24) [10]

И в 9 нету.


 
Sergey13 ©   (2005-07-27 11:00) [13]

SELECT *
FROM avto a, texosm t
where a.NZA = t.NZA(+)

выдаст все авто (даже если они не проходили ТО) с данными о ТО (у непроходивших будут пустые ТО-шные поля).
Не то?


 
rayrom ©   (2005-07-27 11:06) [14]


> Sergey13

Ну дык это уже было, то же что и просто =


 
evvcom ©   (2005-07-27 11:10) [15]


> (+)

Для INNER JOIN это лишнее. (+) нужен, если {LEFT|RIGHT|FULL} JOIN.

> версия ораклов 8,

Вообще-то на форуме принято СУБД указывать в заголовке. Для Оракла очень важна также и версия. Про Оракла где-то в тексте промелькнуло, а вот про версию по-моему нигде ни слова не было. Делайте выводы.


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

Вообщето я тут подумал, посмотрите такой вариант -
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

В принципе будет ли тоже самое?


 
evvcom ©   (2005-07-27 11:24) [17]

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


 
rayrom ©   (2005-07-27 11:27) [18]


> evvcom

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


 
evvcom ©   (2005-07-27 11:37) [19]

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


 
rayrom ©   (2005-07-27 12:02) [20]

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


 
Sergey13 ©   (2005-07-27 12:05) [21]

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

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


 
rayrom ©   (2005-07-27 12:14) [22]


> Sergey13

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


 
rayrom ©   (2005-07-27 12:16) [23]

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


 
Sergey13 ©   (2005-07-27 12:18) [24]

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

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


 
rayrom ©   (2005-07-27 12:24) [25]


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

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

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


 
Sergey13 ©   (2005-07-27 12:35) [26]

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

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


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

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


 
Sergey13 ©   (2005-07-27 12:44) [28]

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


 
ANB ©   (2005-07-27 12:46) [29]


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


 
rayrom ©   (2005-07-27 14:21) [30]

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


 
evvcom ©   (2005-07-27 14:51) [31]


> rayrom ©

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


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

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

EXPLAIN PLAN

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


 
Sergey13 ©   (2005-07-27 15:12) [33]

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


 
ANB ©   (2005-07-27 15:12) [34]


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


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

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


 
rayrom ©   (2005-07-27 15:16) [36]

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


 
evvcom ©   (2005-07-27 15:26) [37]


> А чего в 8 не хватает? И в какой 8?

Я с 8 не работал, поэтому сужу только по "слухам". Например, нет ни в одной 8, насколько мне известно, конструкции with, нет конструкции JOIN, а (+) вроде как Оракл в нескольких строках не позволяет. Аналитических функций по одним утверждениям в 8 нет, по другим вроде есть, точно не знаю. Может я и ошибаюсь, не знаю, повторю, что с 8 я не работал.


 
ANB ©   (2005-07-27 15:26) [38]


> rayrom ©   (27.07.05 15:15) [35]

1. Мускуль много клиентов просто не вытянет
2. Оракла оперативку любит, так что 1 гектар неплохо бы и расширить
3. Запрос нужно оптимизнуть и прохинтовать.
4. А структура базы/индексы в оракле и мс скуле одинаковые ?


 
rayrom ©   (2005-07-27 15:38) [39]

> 1. Мускуль много клиентов просто не вытянет
Ага держал аж 218 штук.
> 2. Оракла оперативку любит,
Ага после 100 клиентов затыкатся начинает!
> так что 1 гектар неплохо бы и расширить
Хотелось бы тока денег не выделяютя!
> 3. Запрос нужно оптимизнуть и прохинтовать.
Во я и спросил как это сделать (вопрос по поводу explain)!
> 4. А структура базы/индексы в оракле и мс скуле одинаковые?
Полный дубликат (тока без тригерров, процедур, и т.п. что в MySQLe не поддерживается)


 
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 гектар неплохо бы и расширить
>Хотелось бы тока денег не выделяютя!
Важно еще как этот гектар распахан.



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

Текущий архив: 2005.09.11;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.027 c
6-1116770820
Chery
2005-05-22 18:07
2005.09.11
Работа с Borland Socket по Интернету, переадресация.


14-1124015959
TUser
2005-08-14 14:39
2005.09.11
Телевон с большими буквами


3-1122900580
Cheaterr
2005-08-01 16:49
2005.09.11
Короткий вопрос по Access


1-1124348932
Juice
2005-08-18 11:08
2005.09.11
Сохранение published-свойств


14-1124058729
Piter
2005-08-15 02:32
2005.09.11
Фотография спортсмена