powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Явно открытый курсор в MS SQL
10 сообщений из 10, страница 1 из 1
Явно открытый курсор в MS SQL
    #32000018
leonsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые Господа!
У меня вопрос такой:

Почему открытый курсор по таблице с 215 000 записями, в котором встроен, например, обычный счетчик строк, работает почти 1 минуту, в то время как функция SUM по сгруппированным данным (порядка 100)в той же таблице работает очень быстро (порядка 1 сек.), беру грязные данные NOLOCK.
Машина - 400 Cel,64Mb,15Gb UDMA66.
Т.е. получается так, что лучше несколько раз взять SUM в большой таблице, чем один раз просканировать всю таблицу и выполнить необходимые операции в открытом курсоре?
Или я что-то не правильно делаю?
Мой ICQ# 71138906
Заранее благодарен.
...
Рейтинг: 0 / 0
Явно открытый курсор в MS SQL
    #32000019
wlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никакой нормальный человек не пользуется курсорами в MS SQL Server потому что они работают ну ооочень долго. Почему это происходит - отчасти из-за неправильно написанных курсоров, отчасти из-за самого SQL Servera.

SQL Sever сделан таким образом что, для курсоров пошли на компромисс - в ущерб скорости добавили функциональность.
Что же касается как привильно написать курсор - проблема стоит только в SQL Server 7.0, MS SQL Server 6.5 и ниже - проблемы нет - там только единственный способ определения курсоров, а именно самый долговыполгяющийся.

А вообще на вашем месте я бы читал книги - там все это написано.
...
Рейтинг: 0 / 0
Явно открытый курсор в MS SQL
    #32000020
Фотография judge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlad правильно заметил, что курсоры в SQL Server'е реализованы плохо - даже при среднем объеме данных время выполнения может быть очень большим.
На мой взгляд, необходимость использования курсоров возникает в основном тогда, когда нужно пробежаться по табличке (запросу) и выполнить определенное действие с текущей строчкой - посчитать сумму, обновить поля, создать другую запись и т.д.

Для реализации механизма еквивалентого по функциональности курсору, но выполняющегося в разы быстрее (не забывайте про индексы) можно воспользоваться следующим методом. Продемонстрирую на примере:
---------------
SELECT @rec_id = MIN(rec_id) - 1
FROM test_table

WHILE 1 = 1
BEGIN
SET ROWCOUNT 1
SELECT @rec_id = rec_id,
@qty = qty
FROM test_table
WHERE rec_id > @rec_id
ORDER BY rec_id
IF @@rowcount = 0
BEGIN
SET ROWCOUNT 0
BREAK
END
SET ROWCOUNT 0

SELECT @sum_qty = @sum_qty + @qty
END

------------------

В этом примере считается сумма по полю qty. Это просто для примера (конечно же это можно было выполнить простым запросом). Главная идея заключается в выборе из таблицы по одной записи:
SET ROWCOUNT 1

и дальше ограничиваем снизу ключ через
WHERE row_id > @row_id

не забудьте ORDER BY и вернуть SET ROWCOUNT 0

-----------

Успехов.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Явно открытый курсор в MS SQL
    #39570393
Goga-Gola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leonsaУважаемые Господа!
У меня вопрос такой:

Почему открытый курсор по таблице с 215 000 записями, в котором встроен, например, обычный счетчик строк, работает почти 1 минуту, в то время как функция SUM по сгруппированным данным (порядка 100)в той же таблице работает очень быстро (порядка 1 сек.), беру грязные данные NOLOCK.
Машина - 400 Cel,64Mb,15Gb UDMA66.
Т.е. получается так, что лучше несколько раз взять SUM в большой таблице, чем один раз просканировать всю таблицу и выполнить необходимые операции в открытом курсоре?
Или я что-то не правильно делаю?
Мой ICQ# 71138906
Заранее благодарен.


Машины выросли, а курсором многие пользуются?
...
Рейтинг: 0 / 0
Явно открытый курсор в MS SQL
    #39570470
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goga-GolaleonsaУважаемые Господа!
У меня вопрос такой:

Почему открытый курсор по таблице с 215 000 записями, в котором встроен, например, обычный счетчик строк, работает почти 1 минуту, в то время как функция SUM по сгруппированным данным (порядка 100)в той же таблице работает очень быстро (порядка 1 сек.), беру грязные данные NOLOCK.
Машина - 400 Cel,64Mb,15Gb UDMA66.
Т.е. получается так, что лучше несколько раз взять SUM в большой таблице, чем один раз просканировать всю таблицу и выполнить необходимые операции в открытом курсоре?
Или я что-то не правильно делаю?
Мой ICQ# 71138906
Заранее благодарен.Многие, родившиеся, когда появилась эта тема, уже умерли!
Ещё даже Путин не был Президентом!


Машины выросли, а курсором многие пользуются?
...
Рейтинг: 0 / 0
Явно открытый курсор в MS SQL
    #39570472
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже сообщение моё глюкнуло:

Многие, родившиеся, когда появилась эта тема, уже умерли!
Ещё даже Путин не был Президентом!
...
Рейтинг: 0 / 0
Явно открытый курсор в MS SQL
    #39570473
Goga-Gola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

да, это самая первая тема форума. Тем она и привлекла мое внимание.
...
Рейтинг: 0 / 0
Явно открытый курсор в MS SQL
    #39570487
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goga-Golaда, это самая первая тема форума. Тем она и привлекла мое внимание.
это даже не некромания.
это геронтофилия
...
Рейтинг: 0 / 0
Явно открытый курсор в MS SQL
    #39570496
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,

самый раз для пятничной темы, залезть в анналы форумных тем
...
Рейтинг: 0 / 0
Явно открытый курсор в MS SQL
    #39570558
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goga-Golaiap,

да, это самая первая тема форума. Тем она и привлекла мое внимание.Не, есть на день раньше
http://www.sql.ru/forum/563/pomogite-so-skriptom-pls
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Явно открытый курсор в MS SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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