Форум: "Базы";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
Вниз2000 Какая разница в производительности? Найти похожие ветки
← →
KAA (2002-04-17 19:01) [0]Какая разница в производительности между этими запросами?
SELECT table1.Name1, table1.Name2, sum(table2.Price)
FROM table1 INNER JOIM table2 on table1.Name2=table2.Name2
GROUP BY table1.Name1, Table2.Name2
SELECT table1.Name1, Table1.Name2, sel_table.Summa
FROM table1 INNER JOIN
(SELECT Name2, sum(Price) AS Summa FROM table2 GROUP BY Name2) AS sel_table
ON table1.Name2=sel_table.Name2
← →
Anatoly Podgoretsky (2002-04-17 19:07) [1]А измерить не судьба?
← →
KAA (2002-04-17 19:24) [2]Могут быть разные варианты для маленьких таблиц и огромных. Боюсь ошибки эксперемента.
← →
Anatoly Podgoretsky (2002-04-17 19:37) [3]Ошибки устраняются статистическими метода, насколько я знаю у MSSQL есть даже соответсвенный утиль для анализа запросов, но утверждать уверенно не буду.
← →
KAA (2002-04-17 19:59) [4]Хорошо, тогда немного другой вопрос. Не является ли второй запрос грубейшим нарушением теории написании баз данных (с которой я к своему сожалению крайне плохо знаком).
Просто мне сегодня сказали что по всем правилам делать надо именно первым способом, а второй зверски снизит производительность.
← →
Anatoly Podgoretsky (2002-04-17 20:14) [5]Не могу ответить нарушает или нет, но все таки рекомендую посмотреть какие есть утилиты для анализа запросов
← →
VAleksey (2002-04-18 05:51) [6]Что значит "нарушение теории" ? 1) Теория часто не может охватить все аспекты практики. 2) Наиболее часто нарушение теории при проектировании БД нужно именно для увеличения скорости работы.
← →
SVM (2002-04-18 07:22) [7]Во втором запросе один "лишний" вложенный запрос.
← →
KAA (2002-04-18 09:55) [8]>SVM (18.04.02 07:22)
В том то и дело, что он вроде как выглядет лишним, и в данной ситуации вполне легко можно обойтись без него. Просто когда у меня есть уже какой-то запрос, в случае его доработки ему легче подключить SELECT (как во втором варианте), а не дорабатывать до первого варианта.
В частности мне понадобилось добавить эту самую сумму в существующий запрос. До этого основной запрос даже не имел ни одного GROUP BY, а пришлось добавить их штук 15, да еще и условие кое-какое. Вообщем добавить подзапрос намного легче и быстрее. Но на пустой базе проблематично оценить скорость.
Маня интересует, как следует поступать в моем случае? Можно ли считать корректным добавление простого подзапроса?
← →
wicked (2002-04-18 11:51) [9]2 KAA ©
можно считать корректным всё, что работает и приносит результат...
насчёт производительности сказать трудно - она будет меняться как в зависимости от размера твоих table1 и table2, так и от наличия определённых индексов... например, если table2 имеет мало уникальных значений поля name2, то имхо как раз второй запрос будет исполняться быстрее...
← →
Anatoly Podgoretsky (2002-04-18 12:03) [10]Только измерения подскажут истину, но а то что база пустая не проблема, нагенери тестовых значение, не исключено, что и ms sql имеет встроенную возможность
← →
KAA (2002-04-18 12:34) [11]>Anatoly Podgoretsky © (18.04.02 12:03)
Я бы потестил, но нагенерить сотни тысяч записей крайне проблематично. Одна таблица ссылается на другую, в запросе по несколько таблиц подключаются. Там иногда вручную крайне неприятно однну запись добавить, ибо несколько справочников для этого пересмотреть надо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c