|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
Ситуация: SP использует временную таблицу. Во время пользовательского сеанса эта SP вызывается много раз. Что будет быстрее работать: 1. Создание временной таблицы при начале работы SP и удаление по завершении работы. 2. Создание этой таблицы только при первом вызове SP и затем при повторном вызове этой SP просто очищать ее от записей, вставленных в результате работы процедуры предыдущего вызова. Сучествуют два варианта, когда таблица заполняется большим количеством записей, и когда малым. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2000, 07:48 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
Я чесно говоря не знаю способа как из процедуры добраться до временных таблиц, созданных вне её. Если только это не глобальные временные процедуры. А вообще я думаю удаление таблицы должно происходить быстрее, чем её очистка. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2000, 08:34 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
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). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2000, 10:32 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
2 SergSuper таблица - временная локальная, но SP вызывается много раз в течении одного сеанса, так что она доступна юзеру 2 gavrik таблица локальная, так что сразу несколько юзеров не смогут к ней обратиться, а при вызове этой sp в пределах одного сеанса можно делать проверку на существование этой таблицы (в случае, если выбрать способ удаления записей, а не самой таблицы) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2000, 11:05 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
Если создать локальную таблицу из SP, то она автоматически грохнется по завершении работы процедуры... А быстро грохнуть все записи можно командой TRUNCATE TABLE TableName. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2000, 13:56 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
Самый быстрый вариант это создание временной таблицы до вызова процедуры, а в процедуре использовать TRUNCATE. Как правильно было замечено, если создавать временную таблицу внутри процедуры, то она будет уничтожена сервером после завершения процедуры. Причем если в процедуре производится не только заливка данных в эту временную таблицу, но и их интенсивная обработка - выборка или изменение по условию, то рекомендуется выносить всю эту обработку в отдельнцю подпроцедуру ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2000, 15:50 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
Все таки прошу обратить внимание на то, что есть 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). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2000, 09:35 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
Если ещё актуально ... 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 ! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2000, 10:56 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
А зачем Create Proc то? Локальная таблица, созданная вне процедуры живет только пока существует Connect из под которого ее созлали. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2000, 14:41 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
Чтобы можно было создать ВЛОЖЕННУЮ пр-ру (без получения сообщ. об ошибке, что тмп отсутствует). (правда в 2000 что-то исправлено вэтом плане). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2000, 05:42 |
|
Скорость выполнения операции...
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2000, 07:28 |
|
|
start [/forum/topic.php?fid=46&msg=32000981&tid=1827572]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 133ms |
0 / 0 |