Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

А измерить не судьба?


Наверх

Титульная страница Поиск, карта сайта Написать письмо