![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
2000 Какая разница в производительности? [MSSQL]
KAA © (2002-04-17 19:01:00)Какая разница в производительности между этими запросами?
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
KAA (2002-04-18 12:34:00) [1]>Anatoly Podgoretsky © (18.04.02 12:03)
Я бы потестил, но нагенерить сотни тысяч записей крайне проблематично. Одна таблица ссылается на другую, в запросе по несколько таблиц подключаются. Там иногда вручную крайне неприятно однну запись добавить, ибо несколько справочников для этого пересмотреть надо.
Anatoly Podgoretsky (2002-04-18 12:03:00) [2]Только измерения подскажут истину, но а то что база пустая не проблема, нагенери тестовых значение, не исключено, что и ms sql имеет встроенную возможность
wicked (2002-04-18 11:51:00) [3]2 KAA ©
можно считать корректным всё, что работает и приносит результат...
насчёт производительности сказать трудно - она будет меняться как в зависимости от размера твоих table1 и table2, так и от наличия определённых индексов... например, если table2 имеет мало уникальных значенийполя name2, то имхо как раз второй запрос будет исполняться быстрее...
KAA (2002-04-18 09:55:00) [4]>SVM (18.04.02 07:22)
В том то и дело, что он вроде как выглядет лишним, и в данной ситуации вполне легко можно обойтись без него. Просто когда у меня есть уже какой-то запрос, в случае его доработки ему легче подключить SELECT (как во втором варианте), а не дорабатывать до первого варианта.
В частности мне понадобилось добавить эту самую сумму в существующий запрос. До этого основной запрос даже не имел ни одного GROUP BY, а пришлось добавить их штук 15, да еще и условие кое-какое. Вообщем добавить подзапрос намного легче и быстрее. Но на пустой базе проблематично оценить скорость.
Маня интересует, как следует поступать в моем случае? Можно ли считать корректным добавление простого подзапроса?
SVM (2002-04-18 07:22:00) [5]Во втором запросе один "лишний" вложенный запрос.
VAleksey (2002-04-18 05:51:00) [6]Что значит "нарушение теории" ? 1) Теория часто не может охватить все аспекты практики. 2) Наиболее часто нарушение теории при проектировании БД нужно именно для увеличения скорости работы.
Anatoly Podgoretsky (2002-04-17 20:14:00) [7]Не могу ответить нарушает или нет, но все таки рекомендую посмотреть какие есть утилиты для анализа запросов
KAA (2002-04-17 19:59:00) [8]Хорошо, тогда немного другой вопрос. Не является ли второй запрос грубейшим нарушением теории написании баз данных (с которой я к своему сожалению крайне плохо знаком).
Просто мне сегодня сказали что по всем правилам делать надо именно первым способом, а второй зверски снизит производительность.
Anatoly Podgoretsky (2002-04-17 19:37:00) [9]Ошибки устраняются статистическими метода, насколько я знаю у MSSQL есть даже соответсвенный утиль для анализа запросов, но утверждать уверенно не буду.
KAA (2002-04-17 19:24:00) [10]Могут быть разные варианты для маленьких таблиц и огромных. Боюсь ошибки эксперемента.
Anatoly Podgoretsky (2002-04-17 19:07:00) [11]А измерить не судьба?