|
MSSQL2000 server-side cursor, ADO - rs.Find, - полный перебор?
|
|||
---|---|---|---|
#18+
rs_.Find "MsgDate >=" + CStr(DateSerial(CInt(cmb_Year.Text), CInt(cmb_Month.BoundText), CInt(txt_Day.Text))), , adSearchForward, rs_First где rs_ заполняется вызовом sp: select (поля) from tbl order by MsgDate, rs_.moveFirst rs_First = rs_.Bookmark server-side, ReadOnly, 15000 записей (всего-то), одна табличка, по полю дата есть кластерный индекс rs_.Find выполняется секунд 10, причем чем больше дата, тем дольше. Task manager при этом показывает загрузку процессора сервером примерно на 70% и клиентом на 30% отсюда делаем вывод, что на сервере идет полный перебор по rs_ ? Т.е. find не использует индексы? А если для получения ID нужной записи ипользовать запрос, то ни к чему тогда использовать полную выборку. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2001, 02:19 |
|
MSSQL2000 server-side cursor, ADO - rs.Find, - полный перебор?
|
|||
---|---|---|---|
#18+
Читайте доки, они - рулез Find действительно не использует индексы, да и как могут табличные индексы использоваться для поиска по результату запроса. Для этого надо seek, который adCmdTableDirect only, что неприятно, хотя и правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2001, 04:58 |
|
|
start [/forum/topic.php?fid=60&msg=32016988&tid=2171679]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
68ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 308ms |
total: | 456ms |
0 / 0 |