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


Sergey13   (2005-07-28 11:49:00) [21]

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


rayrom   (2005-07-28 11:39:00) [22]

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


Sergey13   (2005-07-28 11:21:00) [23]

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 10:11:00) [24]

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


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

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


rayrom   (2005-07-28 09:54:00) [26]

Пришол к такому варианту но чтото не соображу где ошибка: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


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


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


ANB   (2005-07-27 17:31:00) [28]


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


rayrom   (2005-07-27 17:06:00) [29]

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


Sergey13   (2005-07-27 17:04:00) [30]

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


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

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


Sergey13   (2005-07-27 16:44:00) [32]

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 15:57:00) [33]

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


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

Вот последняя редакция, она не отличается от первоначального, только тем что справчник последний связывается, и ксати чуть быстрее работает:
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


ANB   (2005-07-27 15:53:00) [35]


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


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

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


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

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


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

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:38:00) [38]

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


ANB   (2005-07-27 15:26:00) [39]


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

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


evvcom   (2005-07-27 15:26:00) [40]


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

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


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

Наверх

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