Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
select count(*) from execute sp_name
|
|||
|---|---|---|---|
|
#18+
подскажите как выйти с такой ситуации: есть с десяток ХП, каждая возвращает рекордсет, иногда довольно большой :( решил сделать предварительный подсчет записей, чтоб знать стоит ли выполнять саму ХП, или поменять параметры ХП. Конструкция типа select count(*)from execute sp_name по понятным причинам не выполнится. 3апихнуть Select COUNT(*) в отдельную ХП (в ней же вызвать execute sp_name) тоже к добру не приведет, быстродействие системы пострадает значительно (кому нужны временные курсоры). Менять все ХП тоже не хочется. Как быть в такой ситуации? Если есть выход - подскажите. Respect заранее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 16:27 |
|
||
|
select count(*) from execute sp_name
|
|||
|---|---|---|---|
|
#18+
Внимательно читаем заголовок первого сообщения: http://www.sql.ru/forum/actualthread.aspx?tid=67261 -- www.rusug.ru - портал русскоязычной группы пользователей Sybase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 16:35 |
|
||
|
select count(*) from execute sp_name
|
|||
|---|---|---|---|
|
#18+
приношу свои извинения: Сервер: Sybase ASE-12.5 ОСь: w2k/SP4 Железо:Celeron 2.5/256DDR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 17:10 |
|
||
|
select count(*) from execute sp_name
|
|||
|---|---|---|---|
|
#18+
SELECT * FROM SP() в ASE нет, так что этот вариант отпадает сразу. Заполнять времянки и возвращать данные или кол-во с учетом большого кол-ва данных - просядет производительность. Мое IMHO, как человека наслышанного, но не знающего ASE, но представляющего себе MSSQL, с точки зрения борьбы за производительность без слишком больших трудозатрат и сохранения конечной функциональности процедур для клиентских приложений: Вариант 1: сделать дублирующие процедуры путем копирования существующих процедур и там вместо полей возвращать Count(). Плюсы - не страдает производительность, не нужно переписывать существующие процедуры. Минусы - сопровождать придется вдвое больше процедур. Вариант 2: вынести фильтрующую логику в отдельные процедуры, которые заполняют созданные в вызвавших их процедурах времянки, но только на уровне уникальных полей (PK). Тогда с любой процедуры можно вызвать фильтрующую процедуру, которая заполнит времянку на уровне ключей и далее или посчитать их кол-во или же вернуть нужный набор данных, что то типа того: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Если работа разовая, то вполне достаточно варианта 1, если нет, что мне больше по душе второй вариант, во всяком случае у меня на нем реализована фильтрация каталога интернет-магазина с тысячами наименований товаров по десяткам различных разрезов, где все работает шустро и "pre" процедурой пользуются множество процедур для дальнейшей обработки (тут правда стоит сделать оговорку, что сделано это на ASA у которой дюже умный оптимизатор запросов и внутри такой процедуры используется динамический SQL, который в ASA не имеет проблем с производительностью, правами доступа, учетом статистики и другими вещами, которые иногда дают множество ограничений на использование динамического SQL в других РСУБД). -- www.rusug.ru - портал русскоязычной группы пользователей Sybase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 17:34 |
|
||
|
select count(*) from execute sp_name
|
|||
|---|---|---|---|
|
#18+
спасибо за исчерпывающий ответ 2-й вариант мне тоже по душе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 18:11 |
|
||
|
select count(*) from execute sp_name
|
|||
|---|---|---|---|
|
#18+
А я делаю что-то подобное второму варианту, только в одной общей ХП. Примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Минусы подхода - клиент должен знать кода резалтсетов которые он дает в @rep_part. И уметь работать с вариантными резатсетами из процедур. Плюсы - вся логика в одном месте. --- http://www.rusug.ru] Портал рускоязычной группы пользователей Sybase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2006, 19:06 |
|
||
|
select count(*) from execute sp_name
|
|||
|---|---|---|---|
|
#18+
Я бы заметил общую бредовость РАДИ ПОВЫШЕНИЯ ПРОИЗВОДИТЕЛЬНОСТИ или ЧТОБЫ НЕ ВЫПОЛНЯТЬ ПРОЦЕДУРУ вычислять кол-во строк, которое будет возвращать хранимая процедура. Потому что вы просто БУДЕТЕ ВЫПОЛНЯТЬ ЭТИ СЛОЖНЫЕ ЗАПРОСЫ ДВА РАЗА (минимум - один, для вычисления кол-ва строк). Поэтому я бы рекомендовал изобрести другие, более простые запросы, которые могли бы дать общую ощенку сложности тех данных, что будут получены при выполнении основных процедур. При этом эти запросы ДОЛЖНЫ БЫТЬ существенно проще основных, чтобы стоимость их выполнения была бы много ниже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2006, 18:24 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=33791361&tid=2012776]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
21ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 341ms |

| 0 / 0 |
