Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2010, 07:29   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию Рекомпиляция запроса или особенность MS SQL?

Всем доброго.
Вычитал у Тома Кайта в его книге
"Oracle для проффесионалов"
что желательно использовать в запросах
связываемые переменные, потому что тогда не теряется время на
перекомпилирование запроса.
Мне стало интересно попробовать его пример на MS SQL
(стр. 47 и далее)

Я написал вот такое чудо:
Код:
alter procedure [dbo].[Проба2]
(
  @par nvarchar(20)
)
AS
begin
 declare @i int=1
 declare @e nvarchar(20)
 declare @dt datetime=SYSDATETIME()
 while @i<1000 begin
  declare cur cursor for select top 1 kto from main where kto=@par
   open cur
   fetch next from cur into @e
   while @@FETCH_STATUS =0 begin
    fetch next from cur into @e
   end
  deallocate cur
  set @i=@i+1
 end
 declare @dt2 datetime=SYSDATETIME()
 print datediff(millisecond,@dt,@dt2)
	RETURN
END

exec  Проба2 '0'
И вот что интересное получил:
при where kto=@par код отрабатывает 230 мсек
а при where kto='0' всего лишь 180 мсек.

Я что-то недопонимаю или Микрософтовцы пошли другим
путем нежели Оракловцы?

Почему запрос с параметром отработал медленнее?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.04.2010, 12:03   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

не сомневаюсь, что в той же книжке написано что-то типа "изучайте особенности своего сервера субд и не тащите ваши богатые знания одного сервера субд в решение сложных задач на другом сервере субд"

и еще - обычно выигрыш считают при случае когда запрос выполняется каждый раз с новым значением параметра, а не с одним и тем же
например, в оракле если не будешь использовать параметризацию в таком случае твоя прилада выпадет с ошибкой на превышение лимита открытых курсоров (если криво написать приладу и если параметр, ограничивающий макс.кол-во открытых курсоров будет меньше твоей 1000)
soleil@mmc вне форума Ответить с цитированием
Старый 19.04.2010, 12:27   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
"изучайте особенности своего сервера субд и не тащите ваши богатые знания одного сервера субд в решение сложных задач на другом сервере субд"
Тебя случайно не Том Кайт зовут?
Было там такое.

Ладно спасибо. В целом понятно что лучше такой чепухой не заморачиваться, тем паче что таких как я описал ситуевин у меня не будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание запроса SQL Irina_87 Помощь студентам 12 28.12.2009 06:14
Удаление строки с помощью SQL запроса (Query1.SQL.ADD('Delete....')) Schutze Помощь студентам 6 29.11.2009 22:15
Оптимизация sql запроса в хп eda SQL, базы данных 3 28.07.2009 11:57
1С: debug SQL-запроса. crazy horse SQL, базы данных 0 05.06.2008 08:19