#sql #vb6 #adodb
Вопрос:
Мы работаем над набором записей ADODB., открытым для выполнения запроса и хранения записей в наборе записей. Мы использовали местоположение курсора в качестве сервера adUseServer, тип курсора как adOpenStatic и тип блокировки как AdLockReadOnly, и для загрузки и получения количества записей для 900 тыс. записей требуется 1 минута 11 секунд, но в RDODB для извлечения данных в набор записей требуется всего 24 секунды.
У нас есть такие операции, как recordset.movefirst, recordset.movelast и recordset.update для набора записей.
Есть ли у нас какие-либо другие комбинации для сокращения времени выборки?
Комментарии:
1. (При условии, что SQL Server) Весьма вероятно, что это проблема с SQL-запросом и его кэшированным планом, а не какая-либо проблема с RDO против ADO. Вполне вероятно, что версия RDO использует лучший план, чем версия ADO (различия в параметрах подключения, отправляемых каждой библиотекой, могут привести к отдельным планам). Очистите кэш плана или перезагрузите сервер и сначала запустите версию ADO и посмотрите, ведет ли она себя как версия RDO, если это так, то обычно основной причиной является обнюхивание параметров.
2. Меня немного раздражает упоминание rs.MoveFirst, rs.MoveLast, а затем указание «получение количества записей» (подчеркните мое). Вы действительно ищете только количество записей? Если это так, я предлагаю инструкцию SQL, например
SELECT COUNT(<integer column>) AS RecCount FROM <table>[<WHERE clause if needed>]...
, а затем получить счетчик с помощью rs. Поля(«Пересчет»). Ценность.3. Не уверен, как вы можете обновить свой набор записей, если используете блокировку только для чтения. Что вы подразумеваете под выборкой — вы говорите о первом перемещении и количестве записей — или вы говорите о фактическом открытии набора записей?