Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

MSSQL 2000 Какая разница в производительности?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
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: Совет (+) Ответить с цитатой

Тормоза будут тем больше, чем больше будет объем данных в таблицах.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...