|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Добрый день. Написал процедуру, которая возвращает табличные данные. то-есть в процедуре есть Код: sql 1.
. Хочу этот результат использовать в другом запросе/процедуре. Так вот если написать просто Код: sql 1.
, то выполняется 25сек, а если создать временную таблицу и туда вставить полученные значения, то выполнятся 1 мин 25 сек, то-есть в 5 раз дольше. Казалось - классно, можно написать процедуру возвращающую таблицу и потом использовать ее где необходимо. Но время выполнения не радует. Быстрее будет включить код процедуры, которую я хотел вызвать, в код процедуры из которой я хотел ее вызвать. Подскажите, есть варианты как ускорить процесс без дублирования кода? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 14:36 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
user7777, табличная инлайн функция! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 14:42 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
iapuser7777, табличная инлайн функция! неподходит в конкретном примере, т.к. в процедуре используются иструкции недоступные в функции ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 14:46 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
user7777т.к. в процедуре используются иструкции недоступные в функции Переделайте в доступные ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 14:48 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Gloryuser7777т.к. в процедуре используются иструкции недоступные в функции Переделайте в доступные в процедуре создается временная таблица которая используется далее в процедуре не один раз. Если переделать - будет медленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 14:53 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
user7777в процедуре создается временная таблица которая используется далее в процедуре не один раз. Если переделать - будет медленно. Вы не слышали про табличные переменные, которые можно использовать в функциях ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 14:56 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Gloryuser7777в процедуре создается временная таблица которая используется далее в процедуре не один раз. Если переделать - будет медленно. Вы не слышали про табличные переменные, которые можно использовать в функциях ? слышал, но также слышал что их лучше не использовать если колл. строк больше сотни.. и действительно, эксперимент с табличной переменной вместо временной таблицы в данном примере , показал что это так. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 14:59 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
А индексы в табличной переменной пробовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 15:50 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Alex_TomsА индексы в табличной переменной пробовали? нет, )) вот это уже интересно,.. что реально ускоряет?... ссылку дадите?? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 15:55 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
user7777Alex_TomsА индексы в табличной переменной пробовали? нет, )) вот это уже интересно,.. что реально ускоряет?... ссылку дадите??Лучше покажите процедуру. Сдаётся мне, не нужна там временная таблица. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:00 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
1. Поиск в интернете "mssql табличные переменные индексы" даёт массу ссылок, в том числе и на наш форум. 2. Где использовал, там скорость возрастала. Есть ограничение, индексы могу быть ТОЛЬКО уникальные, хотя их можно приспособить и на поля с не уникальными значениями. Пример: поле PARENT уникально, а R_COMP не уникально, создаю дополнительное поле с уникальными значениями. DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID), unique(PARENT)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:13 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
iapuser7777пропущено... нет, )) вот это уже интересно,.. что реально ускоряет?... ссылку дадите??Лучше покажите процедуру. Сдаётся мне, не нужна там временная таблица. приведу пример, возможно и не нужна Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:17 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Alex_Toms1. Поиск в интернете "mssql табличные переменные индексы" даёт массу ссылок, в том числе и на наш форум. 2. Где использовал, там скорость возрастала. Есть ограничение, индексы могу быть ТОЛЬКО уникальные, хотя их можно приспособить и на поля с не уникальными значениями. Пример: поле PARENT уникально, а R_COMP не уникально, создаю дополнительное поле с уникальными значениями. DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID), unique(PARENT))Это зачем так? Почему не просто UNIQUE(R_COMP,PARENT)? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:18 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
тоесть вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:21 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Alex_Toms1. Поиск в интернете "mssql табличные переменные индексы" даёт массу ссылок, в том числе и на наш форум. 2. Где использовал, там скорость возрастала. Есть ограничение, индексы могу быть ТОЛЬКО уникальные, хотя их можно приспособить и на поля с не уникальными значениями. Пример: поле PARENT уникально, а R_COMP не уникально, создаю дополнительное поле с уникальными значениями. DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID), unique(PARENT)) спасибо попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:22 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
user7777Alex_Toms1. Поиск в интернете "mssql табличные переменные индексы" даёт массу ссылок, в том числе и на наш форум. 2. Где использовал, там скорость возрастала. Есть ограничение, индексы могу быть ТОЛЬКО уникальные, хотя их можно приспособить и на поля с не уникальными значениями. Пример: поле PARENT уникально, а R_COMP не уникально, создаю дополнительное поле с уникальными значениями. DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID), unique(PARENT)) спасибо попробуюЛучше попробуйте написать нормальный SELECT (один!!!). Кстати, что такое myFunc? Если функция, то почему без скобок? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:24 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Хотел дать один пример для двух ситуаций одной строкой, поправлюсь, даю две строки. поле PARENT уникально. DECLARE @P TABLE (R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(PARENT)) поле R_COMP не уникально, создаю дополнительное поле ID с уникальными значениями. DECLARE @P TABLE (ID INT IDENTITY (1,1), R_COMP [int], [PARENT] [int], [CHILD] [int], VOL DECIMAL(7,2), unique(R_COMP,ID)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:29 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
iapКстати, что такое myFunc? Если функция, то почему без скобок? myFunc -функция (спешил скобки не добавил,) iapЛучше попробуйте написать нормальный SELECT (один!!!). - пока не знаю как ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:30 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
user7777 iapЛучше попробуйте написать нормальный SELECT (один!!!). - пока не знаю как скажите как добиться того же результата одним селектом? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:32 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Даже если будет найден вариант с одним селектом тормоза всё же останутся. Тормоза от inner join с табличной переменной. Попробуйте вариант с индексами, интересно на сколько изменится скорость? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:41 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
user7777приведу пример, возможно и не нужна Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Ваш запрос - очень странный #tblHeader по сути соединяется сама с собой зачем то ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:55 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Не факт, данные в #tblHeader и tblHeader скорее всего разные... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:58 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Alex_TomsДаже если будет найден вариант с одним селектом тормоза всё же останутся. Тормоза от inner join с табличной переменной. Попробуйте вариант с индексами, интересно на сколько изменится скорость?Какой переменной??! Зачем переменная??! Один SELECT вон он - уже есть! Его просто надо написать по-человечесчки! Кстати, интересно, а зачем MyFunc()? Какого она типа? Вызов этой функции в принципе может тормозить по-страшному. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 16:58 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
iapКакой переменной??! Зачем переменная??! Мой ответ для варианта с табличной переменной вместо временной таблицы... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 17:03 |
|
Как эффективно использовать хр. процедуру, возвращающую табличные данные?
|
|||
---|---|---|---|
#18+
Alex_TomsiapКакой переменной??! Зачем переменная??! Мой ответ для варианта с табличной переменной вместо временной таблицы...А почему не для сотни табличных переменных? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 17:04 |
|
|
start [/forum/topic.php?fid=46&msg=38818544&tid=1699846]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
129ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 250ms |
0 / 0 |