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

Вниз

Как быстрее с подзапросом или с присоединением сгруппированной..?   Найти похожие ветки 

 
Дмитрий С ©   (2011-03-21 06:16) [0]

Есть таблица материалов и таблица выполненных работ над этими материалами: `resource` и `work`
Необходимо выбрать из таблицы `resource` строки, и к каждой из них присоединить количество соответствующих строк из таблица `work`.
Работ обычно 5-6 на материал. Выбирается обычно штук 100 строк из таблицы `resource`. Условие выборки не зависит от количество.
Как быстрее:
SELECT `r`.*, (SELECT COUNT(*) FROM `work` WHERE `resource_id`=`r`.`id`) `count`
FROM `resource` `r`
WHERE ...
или
SELECT `r`.*, `wc`.`count`
FROM `resource` `r`
LEFT JOIN (SELECT `supply_id`, COUNT(*) FROM `work` GROUP BY `supply_id`) `wc` ON `wc`.`supply_id` = `r`.`id`
WHERE ...
?


 
Loginov Dmitry ©   (2011-03-21 08:13) [1]


> Как быстрее с подзапросом или с присоединением сгруппированной


Имхо, самое правильное - сгенерировать солидный объем тестовых данных и на них эксперементировать. Например 1000 строк для таблицы resource и 1000000 строк для таблицы work. А далее - перебирать варианты. Думаю, какие-то из них будут часами шуршать, а каким-то хватит и пару секунд.
Важно, чтобы поля id, resource_id, supply_id были проиндексированными.


 
Sergey13 ©   (2011-03-21 10:56) [2]

> [0] Дмитрий С ©   (21.03.11 06:16)

Я конечно доснонально не всматривался в твои запросы, но мне почему то кажется, что возможен вариант и без подзапросов.
типа такого
SELECT `r`.*, `wc`.`count`
FROM `resource` `r`,`work` wc
WHERE `wc`.`supply_id` = `r`.`id`
and ....
group by `r`.*


только `r`.* надо подробно переписать.


 
OW ©   (2011-03-22 11:50) [3]


> с присоединением сгруппированной.

имхо


 
Кщд   (2011-03-22 12:04) [4]

>OW ©   (22.03.11 11:50) [3]
имеете в виду:

SELECT `r`.*, `wc`.`count`
FROM `resource` `r`
LEFT JOIN (SELECT `supply_id`, COUNT(*) FROM `work` GROUP BY `supply_id`) `wc` ON `wc`.`supply_id` = `r`.`id`
WHERE ...

?


 
OW ©   (2011-03-22 12:58) [5]


> Кщд   (22.03.11 12:04) [4]

да


 
Кщд   (2011-03-23 10:14) [6]

>OW ©   (22.03.11 12:58) [5]
для чего делать FTS по всей таблице `work`, если "Выбирается обычно штук 100 строк из таблицы `resource`"?


 
OW ©   (2011-03-24 14:47) [7]


> Кщд   (23.03.11 10:14) [6]

ну может и не лучший вариант,  из общих соображений сказал



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

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

Наверх




Память: 0.48 MB
Время: 0.007 c
2-1382536357
Дмитрий
2013-10-23 17:52
2014.09.28
Останов без точки останова


15-1392735372
[ВладОшин]
2014-02-18 18:56
2014.09.28
MSSQL: Как узнать какая строка обновлялась последней?


2-1382298460
Вова
2013-10-20 23:47
2014.09.28
ClientDataSet ftArray не могу создать поле


15-1392455034
Юрий Зотов
2014-02-15 13:03
2014.09.28
А не устроить ли нам ММП с культурной программой?


2-1382267269
Алла
2013-10-20 15:07
2014.09.28
RichEdit вставка гиперссылок