Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1380636974
Mikki
2013-10-01 18:16
2014.09.28
Доменная авторизация


2-1382536357
Дмитрий
2013-10-23 17:52
2014.09.28
Останов без точки останова


2-1382366498
Ринат
2013-10-21 18:41
2014.09.28
Создание программы расчета


2-1382366626
Сергеев Ваня
2013-10-21 18:43
2014.09.28
Ошибка ChDir


15-1392802705
ТНЕ картман
2014-02-19 13:38
2014.09.28
функциональное программирование





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