Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите объяснить результат  [new]
SNightmare
Member

Откуда:
Сообщений: 10
Запустил 2 скрипта:
declare @UserStamp varchar(10)
declare @i int

set @i = 0


while (@i < $1000)
begin
  BEGIN TRANSACTION TTT
  SET @UserStamp = 'USER_' + cast(@i as varchar(4))

  UPDATE UserStampObject 
  SET UserStamp = @UserStamp
  WHERE SPID = @@SPID

  IF @@ROWCOUNT = 0
    INSERT INTO UserStampObject ( UserStamp )
    VALUES (@UserStamp)

  SELECT UserStamp
  FROM UserStampObject WITH(NOLOCK)
  WHERE spid = @@spid

  COMMIT TRANSACTION TTT
  set @i = @i + 1
end

declare @UserStamp varchar(10)
declare @i int

set @i = 0

while (@i < $1000)
begin
  BEGIN TRANSACTION TTT

  SET @UserStamp = 'USER_' + cast(@i as varchar(4))
  CREATE Table #MyTable (ID int PRIMARY KEY NOT NULL DEFAULT @@SPID, UserStamp varchar(10) NOT NULL)
  INSERT INTO #MyTable VALUES(@@SPID, @UserStamp)
  SELECT UserSTamp FROM #MyTable
  DROP TABLE #MyTable 

  COMMIT TRANSACTION TTT
  set @i = @i + 1
end

Помогите объяснить почему вариант с временной таблицей работает на порядок быстрее чем с постоянной??? Ведь в варианте с временной таблицей она создается и удаляется помимо записи и чтения как в случае с постоянной таблицей. Таблицы #MyTable и UserStampObject имеют абсолютно одинаковую структуру...
6 окт 05, 13:40    [1944420]     Ответить | Цитировать Сообщить модератору
 Re: Помогите объяснить результат  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Да, может таблица UserStampObject имеет какие триггеры/индексы и прочая констрэйнты... Так ли уж они одинаковы?
6 окт 05, 13:45    [1944445]     Ответить | Цитировать Сообщить модератору
 Re: Помогите объяснить результат  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
Размер постоянной таблицы. Есть ли индексы? Какие?
6 окт 05, 13:46    [1944449]     Ответить | Цитировать Сообщить модератору
 Re: Помогите объяснить результат  [new]
SNightmare
Member

Откуда:
Сообщений: 10
CREATE TABLE [UserStampObject] (
	[SPID] [smallint] NOT NULL CONSTRAINT [DF_UserStamp] DEFAULT (@@spid),
	[UserStamp] [varchar] (10) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	CONSTRAINT [PK_UserStamp] PRIMARY KEY  CLUSTERED 
	(
		[SPID]
	) WITH  FILLFACTOR = 95  ON [PRIMARY] 
) ON [PRIMARY]
GO
6 окт 05, 13:47    [1944457]     Ответить | Цитировать Сообщить модератору
 Re: Помогите объяснить результат  [new]
SNightmare
Member

Откуда:
Сообщений: 10
В постоянной таблице только одна запись. Во временной как видно из скрипта тоже одна запись... Почему быстрее отрабатывает с временной - непонятно...
6 окт 05, 13:49    [1944470]     Ответить | Цитировать Сообщить модератору
 Re: Помогите объяснить результат  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034

SNightmare wrote:
> В постоянной таблице только одна запись. Во временной как видно из
> скрипта тоже одна запись... Почему быстрее отрабатывает с временной -
> непонятно...
возможно потому, что временная таблица лежит в tempdb, который не обязан
сразу писать лог на диск.
Попробуйте создать свою постоянную таблцу тоже в tempdb и попробовать
еще раз.

--
-------------------------
There's no silver bullet!

Posted via ActualForum NNTP Server 1.3

6 окт 05, 13:58    [1944527]     Ответить | Цитировать Сообщить модератору
 Re: Помогите объяснить результат  [new]
SNightmare
Member

Откуда:
Сообщений: 10
После того как поместил постоянную таблицу в tempdb - с постоянной стало отрабатывать быстрее...Теперь все стало ясно. Спасиба :)
6 окт 05, 14:06    [1944587]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить