Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите уйти от вложенного запроса. / 19 сообщений из 19, страница 1 из 1
12.12.2005, 15:13:29
    #33430776
bzzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Проблема ... написана функция ... написал с использованием вложенного запроса ... бац а на хостинге - 4.0.25 ... нужно избавиться от вложенного запроса. Сам, что - то никак не могу совладать ... помогите.

Нужно получить эквивалент запросу

select поля, (select count(*) from tbl3 as e where e.field=a.ID) as count from tbl1 as a, tbl2 as b where a.GroupID = b.ID order by

это сильно упрощенная версия, сам запрос гораздо сложнее о дело в том - что желательно не потерять функционал выборки одним запросом. Не хочу плодить запросы, да и если перейти на несколько запросов - то их будет оч. много.
...
Рейтинг: 0 / 0
12.12.2005, 15:38:03
    #33430872
Marat_L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select поля, count(e.id) as count 
from tbl1 as a, 
      tbl2 as b 
      tbl3 as e
where a.GroupID = b.ID
         e.field=a.ID 
order by ??

Вроде так. Если в tbl1 будут записи, которые могут не иметь соответствия в tbl3 , то надо делать LEFT JOIN .

Однако, если таких случаев много - лучше поломать стиль программирования.

Жизнь коротка - потерпи немного :)
...
Рейтинг: 0 / 0
12.12.2005, 15:43:40
    #33430888
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
ну может как точка отсчета будет след. идея делать все таки придется через два запроса ну примерно так
1.
select field, count(1) as count_of from e
результат выборки оформить как строку для второго запроса

2.
select все как было ранее,
CASE a.ID WHEN field_value_1 THEN count_of_1 .... END
все как было ранее
хотя имхо это маразм проще было бы сделать доп цикл на чем вы там пишите и внем сделать еще один запрос на подсчет количества.
...
Рейтинг: 0 / 0
12.12.2005, 15:45:12
    #33430895
bzzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Marat_L спасибо ... Я вот щас как раз с join и копаюсь ... таким простым запросом не отделаешся ... Соответствие Tbl3 Tbl1 - есть, но в count () должны попадать строки с определенным условием (Я так понимаю это только join'ом можно заменить) ... и этих count() будет минимум 4 штуки с разными условиями ... сорри, что сразу так не написал
...
Рейтинг: 0 / 0
12.12.2005, 15:47:55
    #33430900
bzzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
black zorro ... на несколько запросов переходить совсем не хочу ... т.к. их будет оч. много ... большая нагрузка слишком ... все нада одним запросом получить ... такие циклы гонять - неправильно
...
Рейтинг: 0 / 0
12.12.2005, 16:13:20
    #33430990
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Код: plaintext
1.
select поля, count(distinct e.id) as count1 from tbl1 as a, tbl2 as b, tbl3 as e
 where e.field=a.ID and a.GroupID = b.ID group by поля order by ещё поля;
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
12.12.2005, 16:23:20
    #33431029
Marat_L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Bzzz... и этих count() будет минимум 4 штуки с разными условиями ... сорри, что сразу так не написал
Когда много таблиц в Joine, и когда они потенциально могут иметь неограниченный размер - будут проблемы со скоростью.

Лучше вычисли заранее.

Жизнь коротка - потерпи немного :)
...
Рейтинг: 0 / 0
12.12.2005, 16:36:39
    #33431095
bzzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Marat_L ... да ужж ... Мне что - то скорость joina совсем не нравиться ... с join'ом на один селект count() (участвует 3 таблицы) - думает под минуту ... это неприемлемо ... а что будет с 4-мя даже смотреть не хочу ... как раз таблица с которой идет селект - растет и уже немаленькая ...

а на вложенных селектах - выборка занимает секунды ... В общем щас начинаю придумывать велосипед .. и пытатться решить вопрос и без вложенных селектов и без join'ов ...

Может кто еще какой вариант подскажет?
...
Рейтинг: 0 / 0
12.12.2005, 17:13:06
    #33431250
bzzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
В общем ситуация такая ... временно, чтобы быстро закрыть проблему - перевел все это дело на отдельные селекты для получения количества записей - но такая ситуация Мне не нравиться. Join оказался неприемлемо медленным. Пока думаю как это дело оптисизировать получше ... так что готов выслушивать варианты.
...
Рейтинг: 0 / 0
12.12.2005, 17:34:19
    #33431345
VoDA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Может лучше считать заранее на триггерах?
Похоже что есть некая главная таблица - вот в ней завести доп. поле куда записывать заранее посчитанные значения по триггеру.

ЗЫ в схему данных не вникал, поэтому применимость в данном случае не гарантирую.

----

SAnalis.ru - Just for fun. Еще расту, а так я ДЖИП!
...
Рейтинг: 0 / 0
12.12.2005, 17:49:40
    #33431394
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
BzzzПока думаю как это дело оптисизировать получше ... так что готов выслушивать варианты.сколько угодно http://dev.mysql.com/doc/refman/4.1/en/optimization.html
...
Рейтинг: 0 / 0
12.12.2005, 17:51:37
    #33431402
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
если с полпинка придумать, то нужны правильные индексы на каждое условие в джоине, на каждое условие в where и один большой правильный индекс для order by
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
12.12.2005, 18:53:46
    #33431562
bzzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
VoDA ... Да ... Я щас думаю куда - то в эту сторону ... получатся эти Count()'ты выбираются из таблицы по 3-м изменяемым значениям ... это такой сбор статистики определенного рода, но фишка в том - что он должен быть актуален на момент вызова ... просчитывать эти значения на момент их изменения и хранить где - то ... Пойду про мускульные триггеры почитаю и главно с какой версии они работают %))

maXmo ... Спасибо за линк - обязательно пригодится ... но Я щас пока думаю над тем как построить этот запрос, и какой метод выбрать .... а вот потом уже взяться за оптимизацию ... она здесь очень пригодиться - статистические выборки всегда тяжелые ...
...
Рейтинг: 0 / 0
12.12.2005, 18:58:40
    #33431569
DiLLeR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Bzzz - это Я ... решил зарегистрироваться ... Спасибо всем кто ответил и ответит ...
...
Рейтинг: 0 / 0
13.12.2005, 09:56:10
    #33432098
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Bzzzполучатся эти Count()'ты выбираются из таблицы по 3-м изменяемым значениям ...ну и нет проблем, джойнишь всё втупую (можно и не втупую), считаешь count(distinct table_N.id) и сгруппировать не забываешь, для каких записей саунты считать.
...
Рейтинг: 0 / 0
14.12.2005, 16:55:38
    #33436256
DiLLeR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
maXmo ... Вы Мне не подсобите разобраться, если Я сюда скину часть запроса? ...
...
Рейтинг: 0 / 0
14.12.2005, 17:03:11
    #33436281
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Про триггеры, конечно, почитайте, но в 4.0 их нету, только в 5 ветке.
А для медленного запроса стоит проанализировать EXPLAIN, вполне возможно, что правильно построенные индексы в достаточной степени его ускорят.
...
Рейтинг: 0 / 0
15.12.2005, 09:55:08
    #33437195
Imo
Imo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
Во-первых, в JOIN усть условия после ON в скобочках можно указывать не только условия объединения но и условия отбора в объединяемых таблицах.
Во-вторых тормоза включаются если вы 2 таблицы объединяете через JOIN а остальные просто присоединяется тогда начинается объединение всех со всеми и оперативка летит в трубу а проц греется, так что не поленитесь прописать условия объединения покачественней или все таблицы в линию через JOIN пишите.
...
Рейтинг: 0 / 0
15.12.2005, 22:12:16
    #33439431
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите уйти от вложенного запроса.
DiLLeRmaXmo ... Вы Мне не подсобите разобраться, если Я сюда скину часть запроса? ...давай. Оно большое?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите уйти от вложенного запроса. / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]