Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Underking
Зарегистрирован: 01.04.2002 Сообщения: 7 Откуда: Ростов-на-Дону
|
Добавлено: Ср Апр 17 2002 18:18 Заголовок сообщения: MSSQL 2000 Какая разница в производительности? |
|
|
Какая разница в производительности между этими запросами?
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 |
|
Вернуться к началу |
|
 |
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Ср Апр 17 2002 20:27 Заголовок сообщения: Re: MSSQL 2000 Какая разница в производительности? |
|
|
Второй будет на порядок тормознее. Т.к. подзапросы выполняются медленнее.
Дело в том, что Group BY будет выполнено быстрее, чем аналогичный по сути подзапрос. |
|
Вернуться к началу |
|
 |
Valera Гость
|
Добавлено: Чт Апр 18 2002 03:24 Заголовок сообщения: Re: MSSQL 2000 Какая разница в производительности? |
|
|
Я думаю уще зависит от индексов. Пример
--1 DELETE FROM TMARC WHERE c_id IN (SLECT c_id FROM CANNEL WHERE c_arc=1) AND c_d |
|
Вернуться к началу |
|
 |
Underking
Зарегистрирован: 01.04.2002 Сообщения: 7 Откуда: Ростов-на-Дону
|
Добавлено: Чт Апр 18 2002 08:39 Заголовок сообщения: Re: MSSQL 2000 Какая разница в производительности? |
|
|
Тут вообщем вопрос в следующем, действительно ли они настолько медленней будут выполняться, чтоб от них отказаться в ситуациях, когда легче в запрос добавить подзапрос (как во втором варианте) или дорабатывать основной запрос до первого варианта? |
|
Вернуться к началу |
|
 |
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Апр 18 2002 08:41 Заголовок сообщения: Индексы имеют значение, но... |
|
|
При равноиндексированных базах, все равно второй запрос будет тормознее. |
|
Вернуться к началу |
|
 |
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Апр 18 2002 08:45 Заголовок сообщения: Совет (+) |
|
|
Нужно провести тестирование, максимально приближенное к боевому. Второй запрос более гибок. Но более сложен и есть потенциальная опасность поиметь проблемы.
Если таблицы очень большие (несколько сот тысяч записей), то тормоза будут налицо.
Если меньше - то разницы практически и не будет.
Вообще рекомендую пользоваться профилером (Profiler) он сразу покажет на какой операции самые великие тормоза. |
|
Вернуться к началу |
|
 |
Valera Гость
|
Добавлено: Чт Апр 18 2002 09:03 Заголовок сообщения: Блин....(+) |
|
|
1 пример
DELET FROM TMARC WHERE c_id IN (SLECT c_id FROM CANNEL WHERE c_arc=1) AND c_d < getdate()-45
2 пример
DELET FROM TMARC WHERE c_d < getdate()-45
c_id - 1087 шт. у которых c_arc=1 - 968. Если с_arc=0 то в базе TMARC для этих c_id записей нет.
Так вот 1 запрос выполняется в 100!!! (сто) раз быстрее при тех же индексах. База очень большая поэтому измерение времени реально. |
|
Вернуться к началу |
|
 |
Underking
Зарегистрирован: 01.04.2002 Сообщения: 7 Откуда: Ростов-на-Дону
|
Добавлено: Чт Апр 18 2002 09:05 Заголовок сообщения: Re: Совет (+) |
|
|
База не такая чтоб простая, и прям сейчас крайне проблематично довести ее состояния "максимально приближенного к боевым", т.е. набить данными, ибо это надо делать по всем правилам, а не случайными значениями. На простых теблицах с миллионом записей и простым запросом особой разницы не получилось. Мои таблицы будут с сотнями тысяч записей. В частности мне понадобилось добавить эту самую сумму в существующий запрос. До этого основной запрос даже не имел ни одного GROUP BY, а пришлось добавить их штук 15, да еще и условие кое-какое. Вообщем добавить подзапрос намного легче и быстрее. Меня интересует, как следует поступать в моем случае? Можно ли считать корректным добавление простого подзапроса? |
|
Вернуться к началу |
|
 |
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Апр 18 2002 11:12 Заголовок сообщения: Re: Совет (+) |
|
|
Все определяется бизнес-логикой. Если надо, значит надо. Делай как тебе необходимо. |
|
Вернуться к началу |
|
 |
Underking
Зарегистрирован: 01.04.2002 Сообщения: 7 Откуда: Ростов-на-Дону
|
Добавлено: Чт Апр 18 2002 11:18 Заголовок сообщения: Re: Совет (+) |
|
|
В том то и дело, что сделать можно двумя способами. Один из них (второй) легче и боле понятен (не в данном случае, а когда запросы уже немаленькие), мне его быстрей писать и легче потом понять. Но если он действительно значительно медленней будет выполняться, тогда можно и первым способом делать. Потестировать сейчас возможности нет. Вообщем есть ли между ними существенная разница? Намного ли второй будет медленней? |
|
Вернуться к началу |
|
 |
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Сб Апр 20 2002 13:04 Заголовок сообщения: Re: Совет (+) |
|
|
Тормоза будут тем больше, чем больше будет объем данных в таблицах. |
|
Вернуться к началу |
|
 |
|