-
У клиента два предприятия, использующих одну и ту же программу, работают каждое в своей базе. То есть, по структуре базы одинаковые. Но в одной из них тормозит вот это место, включённое в хранимую процедуру:
CREATE TABLE [ #SELL_ARTICLE] (
[ARTICLE_ID] [int] NOT NULL ,
[GROUP_ID] [int] NOT NULL ,
[ARTICLE_NAME] [varchar] (95) ,
[ARTICLE_CODE] [varchar] (30) ,
[ARTICLE_CODE1] [varchar] (255),
[ARTICLE_TYPE_ID] [int] NOT NULL ,
[ATYPE_NAME] [varchar] (10) NOT NULL ,
[PRICE_IN] [MONEY] NOT NULL ,
[PRICE_OUT] [MONEY] NOT NULL ,
[D1] [MONEY],
[D2] [MONEY],
[D3] [MONEY],
[D4] [MONEY],
[CURRENCY_ID] [int] NOT NULL ,
[CURRENCY_CODE] [varchar] (10) NOT NULL ,
[UNIT_ID] [int] NOT NULL ,
[UNIT_SHORT] [varchar] (10) ,
[WEIGHT] [MONEY],
[QUOTA] [int],
[QUOTA_BOX] [int],
[DESCRIPTION] [varchar] (90),
[MARKUP] [MONEY],
[IS_SELECT] [bit],
[GTD_CODE] [varchar] (33),
[GTD_COUNTRY] [varchar] (35),
[REST] [float],
[PLACE_STORAGE] [varchar] (45),
[RESERV] [float],
[PRIM] [varchar] (3),
[BRAK] [varchar] (5),
[BACK_COLOR] [int],
[TMR_AMOUNT] [money],
[TMR_RESERV] [money],
[TMR_PRICE] [money],
[TMR_DATE] [datetime],
[SCAN_CODE] [varchar] (20),
[IS_PRICE_ROUND] [bit],
[USER_WRITER] [varchar] (255),
[USER_CHANGE] [varchar] (255),
[DATE_CHANGE] datetime ,
[REST_FREE] [float]
)
Вот это на первой базе выполняется в миг, а на второй занимает 5 (пять !!) секунд. Обе базы помещены на один и тот же сервер. С обеими базами работал под логином sa. Есть ли у кого-нибудь материалистическое объяснение сего феномена?
-
> [ #SELL_ARTICLE] а зачем такая экзотика? пробел в имени, + символ временной таблицы, это не опечатка? может это реально задумывалось как временная?
-
Это не пробел в имени. Это так форум отображает.
В общем, посмотрел повнимательнее. Тормозит не сам CREATE, а вместо с INSERT, который идёт за ним. Отдельно CREATE - быстро, 0 сек Отдельно INSERT - быстро, 0 сек Вместе - 5 сек
На первой базе все три варианта идут за 0 сек при приблизительно том же объёме данных
-
> Это так форум отображает. "копипастни" и посмотри, форум или там все таки пробел.
> Отдельно CREATE - быстро, 0 сек > Отдельно INSERT - быстро, 0 сек между ними по правильному нужен GO, т.к. таблица у тебя получается постоянная.
-
Нет там пробела, сам смотрел.
GO? Прямо посреди хранимой процедуры?
Я серьёзно. Выдрал этот кусок create... insert... select... Прогнал и на одной базе, и на другой, не меняя синтаксиса. Разница результатов - 5 сек.
-
> Нет там пробела, сам смотрел. тогда убери скобки вокруг имени #SELL_ARTICLE, и проверь так
> Прямо посреди хранимой процедуры? не, это для квери аналайзера. для проверки там и там пойдет, если чтото измениться надо будет думать.
-
Miau (02.07.09 16:37) [4] количество записей одинаковое?
|