slawa писал(а) 25. Ноября 2009 :: 23:08:не думаю что эти команды полностью кешируют _1sjourn, которые потом могут быть вытеснены.
тут дело в чем, то другом
может кешируется правильный план запроса, может еще чего
эти команды не сканируют таблицы - они создают курсоры
а данные выбираются постепенно, небольшими порциями, командой ПолучитьДокумент() (sql FETCH)
я вчера выкладывал команды 1С, которые отправляются на скуль из-за этих строк, на форум sql.ru:
declare @p1 int
set @p1=1073741828
declare @p2 int
set @p2=180150021
declare @p5 int
set @p5=2
declare @p6 int
set @p6=1
declare @p7 int
set @p7=-1
exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 varchar(23),@P2 varchar(23)',
N'Select * from _1SJOURN(NOLOCK INDEX=ACDATETIME)
where DATE_TIME_IDDOC>=@P1 and DATE_TIME_IDDOC<=@P2
order by DATE_TIME_IDDOC',
@p5 output,@p6 output,@p7 output,'17530101 0 0 ','99991230FHML6O 0 '
select @p1, @p2, @p5, @p6, @p7
exec sp_cursorfetch 180150021,1,0,1
declare @p1 int
set @p1=1073741829
declare @p2 int
set @p2=180150023
declare @p5 int
set @p5=2
declare @p6 int
set @p6=1
declare @p7 int
set @p7=-1
exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 int,@P2 char(23),@P3 char(23),@P4 char(23)',
N'Select JOURN.*
from _1SJOURN JOURN(NOLOCK INDEX=ACDATETIME),
_1SCRDOC CRDOC(NOLOCK INDEX=PARENT)
where JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC
and CRDOC.MDID=@P1 and CRDOC.PARENTVAL=@P2
and CRDOC.CHILD_DATE_TIME_IDDOC>=@P3
and CRDOC.CHILD_DATE_TIME_IDDOC<=@P4
order by CRDOC.MDID, CRDOC.PARENTVAL, CRDOC.CHILD_DATE_TIME_IDDOC',
@p5 output,@p6 output,@p7 output,0,'O1 6GV F30A ','17530101 0 0 ','99991230FHML6O 0 '
select @p1, @p2, @p5, @p6, @p7
exec sp_cursorfetch 180150023,1,0,1
как видно из селектов (период с нулевой даты скуля = 1 января 1753г по 30 декабря 9999г), которыми заполняются курсоры, обращение идет к полной таблице журнала документов и полной таблице подчиненных документов.