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

Вниз

Громаднейшие запросы SQL   Найти похожие ветки 

 
Neo Trinitron ©   (2006-09-15 15:38) [0]

Наверное каждый программист сталкивался с чужими громаднейшими запросами повышеной сложности. У кого какая метода выработалась изучать и понимать такие запросы? Вот сижу и ломаю себе голову: как разобрать запрос на 6 экранов... Вобщем, у кого какая метода?


 
Desdechado ©   (2006-09-15 15:59) [1]

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


 
Neo Trinitron ©   (2006-09-15 16:06) [2]

Гы. Автор ни при чём. Запрос просто сложный, написан неплохо (отступы и прочие правила нотации в хорошем стиле), но целостность картины трудно получить. В идеале представить графически как-то, но как?


 
Romkin ©   (2006-09-15 16:10) [3]

1. Идешь на http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=12992
2. Читаешь вопрос и пытаешься понять.
После этого - вполне нормально поймешь, что написано :)


 
atruhin ©   (2006-09-15 16:19) [4]

> [3] Romkin ©   (15.09.06 16:10)

Класс!


 
Neo Trinitron ©   (2006-09-15 16:22) [5]

> После этого - вполне нормально поймешь, что написано :)

Ответное предложение:

1. Идёшь на первый пост в этой ветке
2. Читаешь вопрос и пытаешься понять
После этого - вполне нормально поймёшь, что написано :)


 
Desdechado ©   (2006-09-15 16:36) [6]

Пытать не просто так, а чтоб узнать, что и как он этим запросом делает.


 
Sergey13 ©   (2006-09-15 16:52) [7]

> [0] Neo Trinitron ©   (15.09.06 15:38)

Пытаться упростить запрос выделяя подзапросы и прочие логические куски, пытаясь уловить общую идею. Потом по частям разбираться. Я так обычно.


 
Neo Trinitron ©   (2006-09-15 17:14) [8]

Sergey13 © , у меня такая же метода, тока я это пытаюсь представить графически. Вышеописаный запрос я разобрал за 3 часа. Не знаю на сколько это медленно/быстро. Мой начальник описал его с помощью теории множеств. Блин, глянул на его работу, вспомнил что такое настоящий страх. Мало того что значков полно, ещё это дело и на 15 листов получилось:)


 
ANB ©   (2006-09-15 17:34) [9]


> Neo Trinitron ©   (15.09.06 17:14) [8]

Ты, часом, не в МВ работаешь ? Там любили писать многокилобоайтные запросы . . .


 
Neo Trinitron ©   (2006-09-15 17:47) [10]

> Ты, часом, не в МВ работаешь ? Там любили писать многокилобоайтные запросы . . .

Не, даже не знаю такой конторы. Но запрос, поверьте, действительно не простой и упростить его нельзя. Он возвращает 37 полей, в критериях 23 условия, 15 таблиц...Така жопа...


 
Desdechado ©   (2006-09-15 17:51) [11]

упрощать можно не запрос, а логику получения данных
во избежание таких извратов я обычно пишу ХП


 
Neo Trinitron ©   (2006-09-15 18:14) [12]

Desdechado ©, этот запрос как раз и находится в ХП. И от этого он не становится проще и поделить его нельзя. Логику не упростишь. Сначала делали так, потом подумали что нужно добавить кое-чего. Так системы и разростаются. Надстройки, мать их... Согласен что такие запросы есть изврат, но я же не буду рассказывать начальнику что надо переписать программу...


 
Desdechado ©   (2006-09-15 19:03) [13]

Имхо, нет ни одного запроса (в котором джойнится более одной таблицы), который нельзя разбить на два и задействовать их в ХП.


 
Anatoly Podgoretsky ©   (2006-09-15 19:44) [14]

Neo Trinitron ©   (15.09.06 15:38)  
Ну какой же это сложный запрос, MS SQL поддерживет до 256 мегабайт


 
ANB ©   (2006-09-15 19:46) [15]


> Он возвращает 37 полей, в критериях 23 условия, 15 таблиц.
> ..Така жопа...

Ээээ. Таки его точно можно сделать меньше.


 
Johnmen ©   (2006-09-16 22:21) [16]

Если появляется НАСУЩНАЯ НЕОБХОДИМОСТЬ строить многоэтажные запросы, то это говорит только об одном - неграмотно спроектированной структуре БД.
Не имхо.


 
Petr V. Abramov ©   (2006-09-19 23:25) [17]

> Johnmen ©   (16.09.06 22:21) [16]
 в Oracle это может повысить скорость, может просто избавить от геморроя.

> Он возвращает 37 полей, в критериях 23 условия, 15 таблиц...Така жопа...
фигня, хотя не ежедневная. хотя для чего-то, кроме анализа - точно така

> как разобрать запрос на 6 экранов... Вобщем, у кого какая метода?
0. узнать, для чего он нужен. если никто не знает - забить
1. задача сводится к пониманию, почему сделано так, ане иначе


 
SergP ©   (2006-09-19 23:43) [18]

> [16] Johnmen ©   (16.09.06 22:21)
> Если появляется НАСУЩНАЯ НЕОБХОДИМОСТЬ строить многоэтажные
> запросы, то это говорит только об одном - неграмотно спроектированной
> структуре БД.
> Не имхо.


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


 
Petr V. Abramov ©   (2006-09-20 00:42) [19]

> SergP ©   (19.09.06 23:43) [18]
говорит о том, что или или вместе
грамотная структура
грамотный формирователь
самое грусное, никто не пользуется :)


 
Desdechado ©   (2006-09-20 12:19) [20]

Petr V. Abramov ©   (19.09.06 23:25) [17]
> в Oracle это может повысить скорость, может просто избавить от геморроя.
А можети наоборот - завалить скорость и вырастить геморрой у тех, кто будет разбирать эти запросы, особенно с целью выяснить, что же было причиной завала скорости.


 
ЮЮ ©   (2006-09-20 12:37) [21]

> Он возвращает 37 полей, в критериях 23 условия, 15 таблиц.

Сведи к

SELECT
 t1.f as AAA,
 ...
 t15.f as YYY
FROM
 aaaaaaaa t1
 JOIN bbbbb t2 ON ...
 ...
 JOIN kkkkkk t15 ON  ...
WHERE
 (t1.f = ...) AND
 ...
 (t15.f = ...)

часть условий из Where, наверняка, можно перенести в ON.

И чего тут разбираться? Откуда 6 экранов? 78 строк всего :)


 
alex_*** ©   (2006-09-21 11:07) [22]

а часть логики перенести во view


 
zdm ©   (2006-09-21 11:17) [23]

а не проще-ли поюзать какие-нибдь проги, типа для Or-ы pl/sql developer, или для IB/FB -IBExpert , там есть форматирование SQL запроса..


 
zdm ©   (2006-09-21 11:19) [24]


> И чего тут разбираться? Откуда 6 экранов? 78 строк всего
> :)

Действительно


 
Sergey13 ©   (2006-09-21 11:44) [25]

> [22] alex_*** ©   (21.09.06 11:07)

И что это даст?


 
alex_*** ©   (2006-09-21 11:48) [26]

>И что это даст?
часть join"ов, cast"ов, where уйдет во VIEW


 
zdm ©   (2006-09-21 11:52) [27]


> >И что это даст?
> часть join"ов, cast"ов, where уйдет во VIEW

и что? с самим запросом ему легче не станет! я так понял что автору, просто трудно разобраться с самим запросом, или не грамотным его форматированием, а перенос во VIEW, да еще когда он до конца не понял самого запроса, запутает его в конец.


 
alex_*** ©   (2006-09-21 11:55) [28]

запрос можно будет отладить по частям и понять общую картину. Когда перед тобой простыня с кучей вложенных циклов или разложенный на процедуры код - что лучше читается и понимается?


 
zdm ©   (2006-09-21 12:00) [29]

я так думаю, что когда полная "засада" с запросом, нужно сделать следующее.
1. Попытаться разъединить большой запрос на кучу маленьких.
2. Повыполнять эти маленькие подзапросы.
3. Картина становится ясней,, и собрать это всё в кучу.


 
Sergey13 ©   (2006-09-21 12:03) [30]

> [26] alex_*** ©   (21.09.06 11:48)

Для понимания конкретного запроса менять структуру БД?!!!
Хм. Интересное предложение. Но я бы не стал им пользоваться. 8-)


 
zdm ©   (2006-09-21 12:05) [31]

Кстати, даже со своими запросами это прокатывает. Просто иногда---как пошла мысль...пишешь, пишешь, а потом кидаешь на исполнение...и не фига. А разберешь так этот громадненький запрос на кучу маленьких и ошибка сразу видна.


 
alex_*** ©   (2006-09-21 12:12) [32]

>Для понимания конкретного запроса менять структуру БД?!!!
Хм. Интересное предложение. Но я бы не стал им пользоваться. 8-)

я же не предлагаю таблички менять


 
atruhin ©   (2006-09-21 12:20) [33]

> [31] zdm ©   (21.09.06 12:05)
> Просто иногда---как пошла мысль...пишешь, пишешь,

Возникает вопрос зачем просто писать, писать, писать? Я например проектирую солжный запрос по порядку, т.е. вложенную часть отладил, дальше и т.д.
А вообще сложные запросы обычно нужны только для отчетов, и там зачастую проще написать один сложный, чем на что то его разбывать.


 
alex_*** ©   (2006-09-21 12:22) [34]

>и там зачастую проще написать один сложный, чем на что то его разбывать

:) потом сложно в нем разбираться. Для отчетов какие-то особые запросы чтоль?


 
dr Gonzo ©   (2006-09-21 12:24) [35]

Мой метод

а) сначала вникнуть в структуру БАЗЫ, можно даже поверхностно. просто уяснить где справочники, где хранилища, пробежаться по View и функциям.
Если база с большим кол-во таблиц, то посмотреть хотя бы ту часть которая используется с запросе.

б) потом уяснить где в запрсе простые справочники для раскодировки - можно отбросить их как константы(мысленно).  

в) собственно обычно реально "рабочие" бывают 2-3 таблицы.

г) еще очень помогает анализировать отдельно подзапросы.


 
Petr V. Abramov ©   (2006-09-21 13:00) [36]

> Desdechado ©   (20.09.06 12:19) [20]
 приведи пример, как select from select сможет снизить скорость?
пример, когда может повысить:

select sum(t.summa), r1.name, r2.name
from t1 /* тут миллилоны записей */,
      r1 /* это какой-нить справочник с name varchar2 под 50-100 */
      r2 /* это какой-нить справочник с name varchar2 под 50-100 */
where t1.id1 = r1.id
  and  t1.id2 = r2.id
group by r1.name, r2.name

а можно сначала просуммировать, группируя по id1, id2, а во внешнем подзапросе уже соединить со справочниками (r1 и r2). Объем сортировки поменяется кардинально. В данном конкретном случае, может, и можно пережить, а вот если таблиц побольше - будет видно невооруженным глазом.


 
zdm ©   (2006-09-21 13:04) [37]


> Petr V. Abramov

select from select  всегда понизит скорость, а группировка по нескоильким таблицам тем-более


 
Petr V. Abramov ©   (2006-09-21 13:11) [38]

> Petr V. Abramov ©   (21.09.06 13:00) [36]
 кстати, и cardinality join`а - тоже

> zdm ©   (21.09.06 13:04) [37]
> select from select  всегда понизит скорость,
 может, мы просто о разных СУБД говорим? хотелось бы надеяться :)

> а группировка по нескоильким таблицам тем-более
а что такое "группировка по нескоильким таблицам"? группируют по полям


 
Petr V. Abramov ©   (2006-09-21 13:13) [39]

в моем примере имелся в виду Oracle, т.к возник он (пример :) в рамках полемики с Johnmen ©   (16.09.06 22:21) [16]


 
zdm ©   (2006-09-21 13:14) [40]

а r1 и r2 это у тебя одна таблица???


 
zdm ©   (2006-09-21 13:15) [41]


> Petr V. Abramov

да ладно, помоему уже обсудили тему :)))


 
Petr V. Abramov ©   (2006-09-21 13:17) [42]

> zdm ©   (21.09.06 13:14) [40]
да какая разница? главное, что соединениес ней идет 2 раза


 
zdm ©   (2006-09-21 13:20) [43]


> Petr V. Abramov

Мы помоему вообще от вопроса автора отъехали и начали решать личные проблемы, тебе не кажится? :)


 
Petr V. Abramov ©   (2006-09-21 13:45) [44]

> zdm ©   (21.09.06 13:20) [43]
> Мы помоему вообще от вопроса автора отъехали и начали решать личные проблемы, тебе не кажится? :)

кажится :)


 
zdm ©   (2006-09-21 13:47) [45]

:)


 
Neo Trinitron ©   (2006-09-21 15:29) [46]

Зашёл в темку посмотреть, а тут уже и тема поменялась :) Я разобрал запрос путём графического представления связей, условий, и т.д. Очень получилось наглядно, удобно, понятно. Однако принятые мною правила нотации не стандартны и софта под них нет. Но мне то оно реально помогло! Думаю софт какой-нить слобать который мне поможет в дальнейшем, чтобы не на бумаге и не ручкой. Всем спасибо.

Некоторым скажу что по количеству подключаемых таблиц судить о простоте/сложности запроса нельзя. Одни и те же таблицы могут подключаться несколько раз и каждая может быть связана с какой-нибудь таблицей и со своими условиями.

Система у нас огромная, построена сравнительно грамотно весьма образоваными и опытными людьми. Разобрав запрос я увидел, что всё было сделано оптимально. Мало того, они ещё и оптимизировали его! Так что огромные запросы могут быть и важно уметь их быстро разбирать.


 
alex_*** ©   (2006-09-21 16:16) [47]

и собирать. и чтоб лишних деталей не осталось



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

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

Наверх




Память: 0.57 MB
Время: 0.047 c
2-1162436881
КарЭ
2006-11-02 06:08
2006.11.19
Combobox


2-1162579625
Батя
2006-11-03 21:47
2006.11.19
Если пользователь с таким логином


9-1138853227
clampo
2006-02-02 07:07
2006.11.19
OpenGL + Console


15-1162133759
Crazybeaver
2006-10-29 17:55
2006.11.19
Вопрос по банерным сетям


15-1162189017
TUser
2006-10-30 09:16
2006.11.19
Простые числа





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский