parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

SELECT TOP 100 << лучше

Александр Петросян (PAF) 19.04.2006 21:02

можно специализированную ускорялку в ODBC драйвер добавить,
которая будет включать это для MSSQL.
у кого есть силы, пусть сделает и пришлёт patch -u.

для oracle то же самое: хоть там и нет offset, но его можно проэмулировать. у кого есть силы, поделюсь очевидной идеей.

-
насчёт "достаётся вся".
select отправляется в базу на всю, на выходе ODBC выдаёт нам курсор [CRecordset].
который прокручивает до нужного $.offset
и из которого читает нужное $.limit(количество записей)
по сети никакие данные за пределами [offset,offset+limit) не передаются.

другое дело, что я вижу, там bug, и задуманные опции курсора:
forwardOnly|readOnly

не передаются. в итоге получается тяжелее, чем могло быть.
ещё вижу, имело смысл включить skipDeletedRecords, это бы помогло пользователям VisualFoxPro (VFP).
ещё вижу, есть флажок
useMultiRowFetch =          0x0200, // turn on multi-row fetch model
от которого, возможно, тоже у ODBC теплее будет.
посмотрю.

-
насчёт сложности в выполнении запроса.
обычно $.limit(3) делают в паре с сортировкой.
при этом, скажем, у MySQL явно написано, что наличие limit помогает ему остановить алгоритм сортировки, если алгоритм видит, что limit штук он уже упорядочил.
уверен, что и MSSQL вполне может применять подобную оптимизацию и в своём диалекте.