Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.16;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
14-50112
Уставший
2002-04-04 20:27
2002.05.16
Всё к чертям!


1-49974
esprit_bel
2002-04-29 07:41
2002.05.16
Про мемо


4-50183
Diemond
2002-03-13 20:30
2002.05.16
Сообщение о завершении работы Windows


1-49938
BAHO
2002-04-25 02:04
2002.05.16
ListView с разукрашенными ячейками


14-50085
Tema
2002-04-05 07:04
2002.05.16
Хранение