powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скорость выполнения операции...
11 сообщений из 11, страница 1 из 1
Скорость выполнения операции...
    #32000526
Vasily
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация:

SP использует временную таблицу. Во время пользовательского сеанса эта SP вызывается много раз. Что будет быстрее работать:

1. Создание временной таблицы при начале работы SP и удаление по завершении работы.
2. Создание этой таблицы только при первом вызове SP и затем при повторном вызове этой SP просто очищать ее от записей, вставленных в результате работы процедуры предыдущего вызова.

Сучествуют два варианта, когда таблица заполняется большим количеством записей, и когда малым.
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000528
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я чесно говоря не знаю способа как из процедуры добраться до временных таблиц, созданных вне её. Если только это не глобальные временные процедуры.

А вообще я думаю удаление таблицы должно происходить быстрее, чем её очистка.
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000529
gavrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Privet,
1. Mne kazhetsja, chto nuzhno jesche obratit' vnimanije na to, skol'ko userov budet rabotat' s etoj SP. Chto budet jesli SP dlja sozdanja tablici TABLE_A vizovut bolshe odnogo usera, to oni mogut poluchit' otvet, chto TABLE_A uzhe suschestvujet.
2. Voobsche ja slishal, chto komanda "TRUNCATE TABLE TableName" rabotajet ochen' bistro. Ja ispol'zuju jeje dovol'no shiroko. Primer: ~50,000 zapisej udaljajetsja meneje chem za sekundu (tochneje zamerit' ne mogu).
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000531
Vasily
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SergSuper
таблица - временная локальная, но SP вызывается много раз в течении одного сеанса, так что она доступна юзеру

2 gavrik
таблица локальная, так что сразу несколько юзеров не смогут к ней обратиться, а при вызове этой sp в пределах одного сеанса можно делать проверку на существование этой таблицы (в случае, если выбрать способ удаления записей, а не самой таблицы)
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000536
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если создать локальную таблицу из SP, то она автоматически грохнется по завершении работы процедуры... А быстро грохнуть все записи можно командой TRUNCATE TABLE TableName.
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000539
Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самый быстрый вариант это создание временной таблицы до вызова процедуры, а в процедуре использовать TRUNCATE.
Как правильно было замечено, если создавать временную таблицу внутри процедуры, то она будет уничтожена сервером после завершения процедуры.
Причем если в процедуре производится не только заливка данных в эту временную таблицу, но и их интенсивная обработка - выборка или изменение по условию, то рекомендуется выносить всю эту обработку в отдельнцю подпроцедуру
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000545
AnatolyS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все таки прошу обратить внимание на то, что есть 2 вида временных таблиц:
You can create local and global temporary tables. Local temporary tables are visible only in the current session; global temporary tables are visible to all sessions.

Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000976
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ещё актуально ...
1.Удаление+создание должны требовать больше времени, чем очистка. В любом случае, если это локальная таблица, то после выполнения пр-ры Вы её теряете.
2. Выполнение вложенных пр-р обращающихся клокальной временной таблице, созданной в головной пр-ре. Самое интересное заключается в том как их написать, не используя динамические вызовы (т.е. p.e. EXECUTE("SELECT * FROM #tmp"). На самом деле всё просто - создавайте тмп таблицу ДО CREATE PROC.
P.E. :
CREATE TABLE #tmp (Id int, Name char(30))
GO
CREATE PROC TmpTest AS
SELECT * FROM #tmp
GO
DROP TABLE #tmp -- для оистки в Batch'e
Enjoy !
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000981
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А зачем Create Proc то? Локальная таблица, созданная вне процедуры живет только пока существует Connect из под которого ее созлали.
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000984
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы можно было создать ВЛОЖЕННУЮ пр-ру (без получения сообщ. об ошибке, что тмп отсутствует). (правда в 2000 что-то исправлено вэтом плане).
...
Рейтинг: 0 / 0
Скорость выполнения операции...
    #32000989
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Fompro:
SQL7 и SQL2000 не проверяют наличие временной таблицы при создании процедуры. Больше того, Если у вас в процедуре используется вр. таблица, которая не создаётся в ней, то SQL перестаёт делать проверки и для постоянных таблиц. Следующий скрипт не даёт сообщкния об ошибке:
CREATE PROC TmpTest AS
SELECT * FROM #lalala
SELECT * FROM tralala
GO

По поводу быстродействия:
Если у вас в процедуре используется вр. таблица, которая не создаётся в ней, то SQL будет перестраивать план при каждом вызове.
Если у вас в процедуре используется вр. таблица, которая в ней создаётся, то SQL не будет использовать индексов при работе (не проверял на SQL2000), т.е. при соединении 2-х таблиц по 10000 записей могут быть проблемы.

Резюме:
1. Во вр. табл. мало записей - определяй её в процедуре.
2. Во вр. табл. много записей - создай 2 процедуры:
CREATE PROC TmpTest1 AS
CREATE TABLE #lalala
INSERT #lalala
......
EXEC TmpTest2
GO

CREATE PROC TmpTest2 AS
......
UPDATE #lalala WHERE...
......
UPDATE #lalala WHERE...
......
SELECT #lalala WHERE...
......

GO
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скорость выполнения операции...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]