powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL получает RecordCount путем полного перебора !!!
6 сообщений из 6, страница 1 из 1
MSSQL получает RecordCount путем полного перебора !!!
    #32057750
qwert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация такая - открываю Recorset (adOpenKeyset) с указанием PageSize & AbsolutePage и при этом испытываю жуткие тормоза - после разбора оказывается что тормозит на вызове RecordCount - после трасировки оказывается что в этот момент SQL считает записи путем полного перебора :-(((

Все необходимые индексы присутствуют но тем не менее по умолчанию он делает выборку путем сканирования кластерного индекса (выборка ~30% от общего кол-ва записей) а не с использованием обычного индекса (в этом случае действительно для подсчета записей кроме сканирования делать больше нечего) но даже если явно указать какой индекс использовать он все равно считает записи полным перебором ?!

Я не могу понять почему и зачем он это делает а это всего навсего реализуется просмотр записей по страницам

конечно если не использовать RecordCount а зделать дополнительный вызов с получением COUNT(*) по тем же условиям что и основная выборка то все встанет на свои места и будет быстро работаеть но все таки почему он так делает !!!
...
Рейтинг: 0 / 0
MSSQL получает RecordCount путем полного перебора !!!
    #32057756
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если не ошибаюсь, RecordCount считается на клиенте.
...
Рейтинг: 0 / 0
MSSQL получает RecordCount путем полного перебора !!!
    #32057763
Фотография Гнездин Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AVL не ошибается. А для получения количества записей не надо выполнять второй SELECT, достаточно сразу после выполнения запроса взять значение переменной @@rowcount
...
Рейтинг: 0 / 0
MSSQL получает RecordCount путем полного перебора !!!
    #32057765
qwert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
интересно каким это образом получить @@ROWCOUNT из вызова Conn.Execute :-)
для этого как раз RecordCount и существует

а вот зачем в момент вызова RecordCount MSSQL вызывает
exec sp_cursorfetch 180150090, 16, 1089, 64
и так по всем записям я не понимаю

Задача ведь простая - отображать по десять записей на странице и показать страницы для прокрутки т.е. от MSSQL требуется FETCH на десять записей и вернуть их общее кол-во - между прочим в MDB этот механизм работал на ура

и полное сканирование таблицы которое показывает Query Analyzer для этого запроса здесь ни в коем случае не нужно а MSSQL выберает именно этот метод по умолчанию и приходится ему явно указывать какой индекс использовать - по моему это смахивает на полный бред хотя соответсвующий индекс для выбрки присутствует
...
Рейтинг: 0 / 0
MSSQL получает RecordCount путем полного перебора !!!
    #32057778
Фотография Гнездин Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает взять @@rowcount внутри процедуры? Или внутри execute идет select? инкапсуляция в процедуры дает много всяческих удобств :)
...
Рейтинг: 0 / 0
MSSQL получает RecordCount путем полного перебора !!!
    #32057837
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй клиентский курсор и не используй серверный. Тогда о таких и похожих проблемах размышлять не придется.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MSSQL получает RecordCount путем полного перебора !!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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