|
|
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Проблема ... написана функция ... написал с использованием вложенного запроса ... бац а на хостинге - 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 это сильно упрощенная версия, сам запрос гораздо сложнее о дело в том - что желательно не потерять функционал выборки одним запросом. Не хочу плодить запросы, да и если перейти на несколько запросов - то их будет оч. много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 15:13:29 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вроде так. Если в tbl1 будут записи, которые могут не иметь соответствия в tbl3 , то надо делать LEFT JOIN . Однако, если таких случаев много - лучше поломать стиль программирования. Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 15:38:03 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
ну может как точка отсчета будет след. идея делать все таки придется через два запроса ну примерно так 1. select field, count(1) as count_of from e результат выборки оформить как строку для второго запроса 2. select все как было ранее, CASE a.ID WHEN field_value_1 THEN count_of_1 .... END все как было ранее хотя имхо это маразм проще было бы сделать доп цикл на чем вы там пишите и внем сделать еще один запрос на подсчет количества. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 15:43:40 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Marat_L спасибо ... Я вот щас как раз с join и копаюсь ... таким простым запросом не отделаешся ... Соответствие Tbl3 Tbl1 - есть, но в count () должны попадать строки с определенным условием (Я так понимаю это только join'ом можно заменить) ... и этих count() будет минимум 4 штуки с разными условиями ... сорри, что сразу так не написал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 15:45:12 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
black zorro ... на несколько запросов переходить совсем не хочу ... т.к. их будет оч. много ... большая нагрузка слишком ... все нада одним запросом получить ... такие циклы гонять - неправильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 15:47:55 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 16:13:20 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Bzzz... и этих count() будет минимум 4 штуки с разными условиями ... сорри, что сразу так не написал Когда много таблиц в Joine, и когда они потенциально могут иметь неограниченный размер - будут проблемы со скоростью. Лучше вычисли заранее. Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 16:23:20 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Marat_L ... да ужж ... Мне что - то скорость joina совсем не нравиться ... с join'ом на один селект count() (участвует 3 таблицы) - думает под минуту ... это неприемлемо ... а что будет с 4-мя даже смотреть не хочу ... как раз таблица с которой идет селект - растет и уже немаленькая ... а на вложенных селектах - выборка занимает секунды ... В общем щас начинаю придумывать велосипед .. и пытатться решить вопрос и без вложенных селектов и без join'ов ... Может кто еще какой вариант подскажет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 16:36:39 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
В общем ситуация такая ... временно, чтобы быстро закрыть проблему - перевел все это дело на отдельные селекты для получения количества записей - но такая ситуация Мне не нравиться. Join оказался неприемлемо медленным. Пока думаю как это дело оптисизировать получше ... так что готов выслушивать варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 17:13:06 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Может лучше считать заранее на триггерах? Похоже что есть некая главная таблица - вот в ней завести доп. поле куда записывать заранее посчитанные значения по триггеру. ЗЫ в схему данных не вникал, поэтому применимость в данном случае не гарантирую. ---- SAnalis.ru - Just for fun. Еще расту, а так я ДЖИП! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 17:34:19 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
BzzzПока думаю как это дело оптисизировать получше ... так что готов выслушивать варианты.сколько угодно http://dev.mysql.com/doc/refman/4.1/en/optimization.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 17:49:40 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
если с полпинка придумать, то нужны правильные индексы на каждое условие в джоине, на каждое условие в where и один большой правильный индекс для order by ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 17:51:37 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
VoDA ... Да ... Я щас думаю куда - то в эту сторону ... получатся эти Count()'ты выбираются из таблицы по 3-м изменяемым значениям ... это такой сбор статистики определенного рода, но фишка в том - что он должен быть актуален на момент вызова ... просчитывать эти значения на момент их изменения и хранить где - то ... Пойду про мускульные триггеры почитаю и главно с какой версии они работают %)) maXmo ... Спасибо за линк - обязательно пригодится ... но Я щас пока думаю над тем как построить этот запрос, и какой метод выбрать .... а вот потом уже взяться за оптимизацию ... она здесь очень пригодиться - статистические выборки всегда тяжелые ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 18:53:46 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Bzzz - это Я ... решил зарегистрироваться ... Спасибо всем кто ответил и ответит ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2005, 18:58:40 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Bzzzполучатся эти Count()'ты выбираются из таблицы по 3-м изменяемым значениям ...ну и нет проблем, джойнишь всё втупую (можно и не втупую), считаешь count(distinct table_N.id) и сгруппировать не забываешь, для каких записей саунты считать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2005, 09:56:10 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
maXmo ... Вы Мне не подсобите разобраться, если Я сюда скину часть запроса? ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 16:55:38 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Про триггеры, конечно, почитайте, но в 4.0 их нету, только в 5 ветке. А для медленного запроса стоит проанализировать EXPLAIN, вполне возможно, что правильно построенные индексы в достаточной степени его ускорят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2005, 17:03:11 |
|
||
|
Помогите уйти от вложенного запроса.
|
|||
|---|---|---|---|
|
#18+
Во-первых, в JOIN усть условия после ON в скобочках можно указывать не только условия объединения но и условия отбора в объединяемых таблицах. Во-вторых тормоза включаются если вы 2 таблицы объединяете через JOIN а остальные просто присоединяется тогда начинается объединение всех со всеми и оперативка летит в трубу а проц греется, так что не поленитесь прописать условия объединения покачественней или все таблицы в линию через JOIN пишите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 09:55:08 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=33431394&tid=1853291]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
196ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 190ms |
| total: | 489ms |

| 0 / 0 |
