Форум: "Базы";
Текущий архив: 2014.09.28;
Скачать: [xml.tar.bz2];
ВнизКак быстрее с подзапросом или с присоединением сгруппированной..? Найти похожие ветки
← →
Дмитрий С © (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c