Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.006 c
1-49934
rank
2002-05-02 23:58
2002.05.16
Друзья!!! Есть Stringgrid с несколькими столбцами........


1-49956
ДмитрийВ
2002-05-03 19:51
2002.05.16
Memo Mouse Move


3-49895
wer
2002-04-19 10:14
2002.05.16
Проблемы с запросом


3-49859
Александр Арсентьев
2002-04-19 09:20
2002.05.16
пользователи


7-50149
Ahad
2002-02-14 16:58
2002.05.16
ISAPI





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