Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли избавиться от TableScan?  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1050
Добрый день
Имеется
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Имеется база данных с именем db и табличкой в ней:
CREATE TABLE [dbo].[_AccumReg6151](
	[_Period] [datetime] NOT NULL,
	[_RecorderTRef] [binary](4) NOT NULL,
	[_RecorderRRef] [binary](16) NOT NULL,
	[_LineNo] [numeric](9, 0) NOT NULL,
	[_Active] [binary](1) NOT NULL,
	[_RecordKind] [numeric](1, 0) NOT NULL,
	[_Fld6152RRef] [binary](16) NOT NULL,
	[_Fld6153] [nvarchar](10) NOT NULL,
	[_Fld6159] [numeric](10, 2) NOT NULL,
	[_Fld6155] [numeric](10, 2) NOT NULL,
	[_Fld6184] [numeric](10, 4) NOT NULL,
	[_Fld6156] [numeric](15, 2) NOT NULL,
	[_Fld6446] [numeric](15, 2) NOT NULL,
	[_Fld6447] [numeric](15, 2) NOT NULL
) ON [PRIMARY]
CREATE UNIQUE NONCLUSTERED INDEX [_AccumR6151_ByPeriod_TRN] ON [dbo].[_AccumReg6151] 
(
	[_Period] ASC,
	[_RecorderTRef] ASC,
	[_RecorderRRef] ASC,
	[_LineNo] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
CREATE UNIQUE NONCLUSTERED INDEX [_AccumR6151_ByRecorder_RN] ON [dbo].[_AccumReg6151] 
(
	[_RecorderTRef] ASC,
	[_RecorderRRef] ASC,
	[_LineNo] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

В таблице 22 тыс. записей

В другой базе c именем PosterPrint имеется view:
ALTER View [dbo].[РегистрНакопления_СкладОШП]
as
select 
    _Period as Период,
    _RecorderTRef as РегистраторСсылкаТип,
    _RecorderRRef as РегистраторСсылка,
    _LineNo as НомерСтроки,
    _Active as Активность,
    _RecordKind as _RecordKind,
    _Fld6152RRef as НоменклатураСсылка,
    _Fld6153 as ИнвентарныйНомер,
    _Fld6159 as Ширина,
    _Fld6155 as Длина,
    _Fld6184 as Площадь,
    _Fld6156 as Стоимость,
    _Fld6446 as СуммаНДС,
    _Fld6447 as СуммаБезНДС
from
    Db.dbo._AccumReg6151

Запрос с использованием этого view:
select
	Sum(case when _RecordKind=1 then Стоимость else -Стоимость end) as Sm
from dbo.РегистрНакопления_СкладОШП Z
where Z.Период>='20090401' and Z.Период<'20090501' and Z.РегистраторСсылкаТип=0x00001810
имеет вот такой план выполнения:

SELECT SUM(case when [_RecordKind]=(1) then [Стоимость] else  -[Стоимость] end) [Sm] FROM [dbo].[РегистрНакопления_СкладОШП] [Z] WHERE [Z].[Период]>=@1 AND [Z].[Период]<@2 AND [Z].[РегистраторСсылкаТип]=@3
|--Compute Scalar(DEFINE:([Expr1004]=CASE WHEN [Expr1014]=(0) THEN NULL ELSE [Expr1015] END))
|--Stream Aggregate(DEFINE:([Expr1014]=COUNT_BIG([Expr1007]), [Expr1015]=SUM([Expr1007])))
|--Compute Scalar(DEFINE:([Expr1007]=CASE WHEN [db].[dbo].[_AccumReg6151].[_RecordKind]=(1.) THEN [db].[dbo].[_AccumReg6151].[_Fld6156] ELSE -[db].[dbo].[_AccumReg6151].[_Fld6156] END))
|--Table Scan(OBJECT:([db].[dbo].[_AccumReg6151]), WHERE:([db].[dbo].[_AccumReg6151].[_Period]>='2009-04-01 00:00:00.000' AND [db].[dbo].[_AccumReg6151].[_Period]<'2009-05-01 00:00:00.000' AND [db].[dbo].[_AccumReg6151].[_RecorderTRef]=0x00001810))

ожидалось, что сервер будет использовать индекс _AccumR6151_ByPeriod_TRN.
Вносить изменения в базу db нельзя. Изменять можно только view.
Можно ли как-то избавиться от Table Scan?
25 май 09, 13:55    [7222909]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36801
И сколько по этому условию записей из таблицы отбирается? В процентах.
25 май 09, 14:08    [7223046]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36801
З.Ы. По-хорошему, в ваш индекс инклудом надо [RecordKind] и [Стоимость]. Либо индекс [_AccumR6151_ByPeriod_TRN] сделать кластерным.

Сообщение было отредактировано: 25 май 09, 14:14
25 май 09, 14:10    [7223059]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1050
Гавриленко Сергей Алексеевич
И сколько по этому условию записей из таблицы отбирается? В процентах.


996 записей, т.е < 5%

К сожалению, не могу менять структуру таблицы.
25 май 09, 14:14    [7223096]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36801
Обновите статистику. Если не полегчает, то указывайте индекс хинтом.
25 май 09, 14:15    [7223107]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
Змей
Member

Откуда: Н.Новгород -> Москва
Сообщений: 192
VladimirKr,

create view dbo.РегистрНакопления_СкладОШП
as
select 
.....
from
    dbo._AccumReg6151 WITH (INDEX=_AccumR6151_ByPeriod_TRN)
25 май 09, 14:31    [7223222]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
Змей
Member

Откуда: Н.Новгород -> Москва
Сообщений: 192
Гавриленко Сергей Алексеевич
Обновите статистику. Если не полегчает, то указывайте индекс хинтом.


упс... опоздал..
25 май 09, 14:32    [7223228]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1050
Змей, Гавриленко Сергей Алексеевич,
большое спасибо. Обновление статистики не помогло, но помог view c хинтом.
Я и не знал, что если во view указать хинт, то действие этого хинта будет продолжено на все обращения к view.
25 май 09, 14:42    [7223306]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
iljy
Guest
VladimirKr
Добрый день
CREATE UNIQUE NONCLUSTERED INDEX [_AccumR6151_ByPeriod_TRN] ON [dbo].[_AccumReg6151] 
(
	[_Period] ASC,
	[_RecorderTRef] ASC,
	[_RecorderRRef] ASC,
	[_LineNo] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]


VladimirKr

select
	Sum(case when _RecordKind=1 then Стоимость else -Стоимость end) as Sm
from dbo.РегистрНакопления_СкладОШП Z
where Z.Период>='20090401' and Z.Период<'20090501' and Z.РегистраторСсылкаТип=0x00001810

Извините, но планировщик совершенно прав- у индекса неподходящий порядок колонок. Можно конечно заставить его использовать, но будет ли прирост - зависит от количества выбираемых записей. Выход - сделайте индекс с нужным порядком колонок (РегистраторСсылкаТип, Период) на view, можете в него включить как include колонки _RecordKind, Стоимость, и будет вам счастье.
25 май 09, 14:42    [7223307]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
Glory
Member

Откуда:
Сообщений: 104760
VladimirKr
Змей, Гавриленко Сергей Алексеевич,
большое спасибо. Обновление статистики не помогло, но помог view c хинтом.
Я и не знал, что если во view указать хинт, то действие этого хинта будет продолжено на все обращения к view.

И запрос с хинтом типа быстрее и меньше чтений делает ?
25 май 09, 14:43    [7223316]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1050
Glory,

реальный план с хинтом
1	1	select   Sum(case when _RecordKind=1 then Стоимость else -Стоимость end) as Sm  from dbo.РегистрНакопления_СкладОШП Z with (index(_AccumR6151_ByPeriod_TRN))  where Z.период>='20090401' and Z.период<'20090501' and Z.РегистраторСсылкаТип=0x00001810	1	1	0	NULL	NULL	NULL	NULL	1	NULL	NULL	NULL	1,418281	NULL	NULL	SELECT	0	NULL
0 0 |--Compute Scalar(DEFINE:([Expr1004]=CASE WHEN [Expr1013]=(0) THEN NULL ELSE [Expr1014] END)) 1 2 1 Compute Scalar Compute Scalar DEFINE:([Expr1004]=CASE WHEN [Expr1013]=(0) THEN NULL ELSE [Expr1014] END) [Expr1004]=CASE WHEN [Expr1013]=(0) THEN NULL ELSE [Expr1014] END 1 0 0,0006487987 24 1,418281 [Expr1004] NULL PLAN_ROW 0 1
1 1 |--Stream Aggregate(DEFINE:([Expr1013]=COUNT_BIG([Expr1005]), [Expr1014]=SUM([Expr1005]))) 1 3 2 Stream Aggregate Aggregate NULL [Expr1013]=COUNT_BIG([Expr1005]), [Expr1014]=SUM([Expr1005]) 1 0 0,0006487987 24 1,418281 [Expr1013], [Expr1014] NULL PLAN_ROW 0 1
0 0 |--Compute Scalar(DEFINE:([Expr1005]=CASE WHEN [db].[dbo].[_AccumReg6151].[_RecordKind]=(1.) THEN [db].[dbo].[_AccumReg6151].[_Fld6156] ELSE -[db].[dbo].[_AccumReg6151].[_Fld6156] END)) 1 4 3 Compute Scalar Compute Scalar DEFINE:([Expr1005]=CASE WHEN [db].[dbo].[_AccumReg6151].[_RecordKind]=(1.) THEN [db].[dbo].[_AccumReg6151].[_Fld6156] ELSE -[db].[dbo].[_AccumReg6151].[_Fld6156] END) [Expr1005]=CASE WHEN [db].[dbo].[_AccumReg6151].[_RecordKind]=(1.) THEN [db].[dbo].[_AccumReg6151].[_Fld6156] ELSE -[db].[dbo].[_AccumReg6151].[_Fld6156] END 1080,498 0 0,0001080498 16 1,417633 [Expr1005] NULL PLAN_ROW 0 1
996 1 |--Nested Loops(Inner Join, OUTER REFERENCES:([Bmk1000], [Expr1012]) WITH UNORDERED PREFETCH) 1 5 4 Nested Loops Inner Join OUTER REFERENCES:([Bmk1000], [Expr1012]) WITH UNORDERED PREFETCH NULL 1080,498 0 0,004516481 21 1,417525 [db].[dbo].[_AccumReg6151].[_RecordKind], [db].[dbo].[_AccumReg6151].[_Fld6156] NULL PLAN_ROW 0 1
996 1 |--Index Seek(OBJECT:([db].[dbo].[_AccumReg6151].[_AccumR6151_ByPeriod_TRN]), SEEK:(([db].[dbo].[_AccumReg6151].[_Period], [db].[dbo].[_AccumReg6151].[_RecorderTRef]) >= ('2009-04-01 00:00:00.000', 0x00001810) AND [db].[dbo].[_AccumReg6151].[_Period] < '2009-05-01 00:00:00.000'), WHERE:([db].[dbo].[_AccumReg6151].[_RecorderTRef]=0x00001810) ORDERED FORWARD) 1 7 5 Index Seek Index Seek OBJECT:([db].[dbo].[_AccumReg6151].[_AccumR6151_ByPeriod_TRN]), SEEK:(([db].[dbo].[_AccumReg6151].[_Period], [db].[dbo].[_AccumReg6151].[_RecorderTRef]) >= ('2009-04-01 00:00:00.000', 0x00001810) AND [db].[dbo].[_AccumReg6151].[_Period] < '2009-05-01 00:00:00.000'), WHERE:([db].[dbo].[_AccumReg6151].[_RecorderTRef]=0x00001810) ORDERED FORWARD, FORCEDINDEX [Bmk1000], [db].[dbo].[_AccumReg6151].[_RecorderTRef] 1080,498 0,009050926 0,001922734 19 0,01097366 [Bmk1000], [db].[dbo].[_AccumReg6151].[_RecorderTRef] NULL PLAN_ROW 0 1
996 996 |--RID Lookup(OBJECT:([db].[dbo].[_AccumReg6151]), SEEK:([Bmk1000]=[Bmk1000]) LOOKUP ORDERED FORWARD) 1 9 5 RID Lookup RID Lookup OBJECT:([db].[dbo].[_AccumReg6151]), SEEK:([Bmk1000]=[Bmk1000]) LOOKUP ORDERED FORWARD [db].[dbo].[_AccumReg6151].[_RecordKind], [db].[dbo].[_AccumReg6151].[_Fld6156] 1 0,003125 0,0001581 21 1,401264 [db].[dbo].[_AccumReg6151].[_RecordKind], [db].[dbo].[_AccumReg6151].[_Fld6156] NULL PLAN_ROW 0 1080,498

Реальный план без хинта:
1	1	select   Sum(case when _RecordKind=1 then Стоимость else -Стоимость end) as Sm  from dbo.РегистрНакопления_СкладОШП Z with (index(_AccumR6151_ByPeriod_TRN))  where Z.период>='20090401' and Z.период<'20090501' and Z.РегистраторСсылкаТип=0x00001810	1	1	0	NULL	NULL	NULL	NULL	1	NULL	NULL	NULL	0,3731178	NULL	NULL	SELECT	0	NULL
0 0 |--Compute Scalar(DEFINE:([Expr1004]=CASE WHEN [Expr1012]=(0) THEN NULL ELSE [Expr1013] END)) 1 2 1 Compute Scalar Compute Scalar DEFINE:([Expr1004]=CASE WHEN [Expr1012]=(0) THEN NULL ELSE [Expr1013] END) [Expr1004]=CASE WHEN [Expr1012]=(0) THEN NULL ELSE [Expr1013] END 1 0 0,0006487987 24 0,3731178 [Expr1004] NULL PLAN_ROW 0 1
1 1 |--Stream Aggregate(DEFINE:([Expr1012]=COUNT_BIG([Expr1005]), [Expr1013]=SUM([Expr1005]))) 1 3 2 Stream Aggregate Aggregate NULL [Expr1012]=COUNT_BIG([Expr1005]), [Expr1013]=SUM([Expr1005]) 1 0 0,0006487987 24 0,3731178 [Expr1012], [Expr1013] NULL PLAN_ROW 0 1
0 0 |--Compute Scalar(DEFINE:([Expr1005]=CASE WHEN [db].[dbo].[_AccumReg6151].[_RecordKind]=(1.) THEN [db].[dbo].[_AccumReg6151].[_Fld6156] ELSE -[db].[dbo].[_AccumReg6151].[_Fld6156] END)) 1 4 3 Compute Scalar Compute Scalar DEFINE:([Expr1005]=CASE WHEN [db].[dbo].[_AccumReg6151].[_RecordKind]=(1.) THEN [db].[dbo].[_AccumReg6151].[_Fld6156] ELSE -[db].[dbo].[_AccumReg6151].[_Fld6156] END) [Expr1005]=CASE WHEN [db].[dbo].[_AccumReg6151].[_RecordKind]=(1.) THEN [db].[dbo].[_AccumReg6151].[_Fld6156] ELSE -[db].[dbo].[_AccumReg6151].[_Fld6156] END 1080,498 0 0,0022223 28 0,3462459 [Expr1005] NULL PLAN_ROW 0 1
996 1 |--Table Scan(OBJECT:([db].[dbo].[_AccumReg6151]), WHERE:([db].[dbo].[_AccumReg6151].[_Period]>='2009-04-01 00:00:00.000' AND [db].[dbo].[_AccumReg6151].[_Period]<'2009-05-01 00:00:00.000' AND [db].[dbo].[_AccumReg6151].[_RecorderTRef]=0x00001810)) 1 5 4 Table Scan Table Scan OBJECT:([db].[dbo].[_AccumReg6151]), WHERE:([db].[dbo].[_AccumReg6151].[_Period]>='2009-04-01 00:00:00.000' AND [db].[dbo].[_AccumReg6151].[_Period]<'2009-05-01 00:00:00.000' AND [db].[dbo].[_AccumReg6151].[_RecorderTRef]=0x00001810) [db].[dbo].[_AccumReg6151].[_RecordKind], [db].[dbo].[_AccumReg6151].[_Fld6156] 1080,498 0,3194213 0,0246023 33 0,3440236 [db].[dbo].[_AccumReg6151].[_RecordKind], [db].[dbo].[_AccumReg6151].[_Fld6156] NULL PLAN_ROW 0 1

Похоже, чтений меньше не стало...
Ну что же, я сделал все что мог...

Сообщение было отредактировано: 25 май 09, 15:21
25 май 09, 14:53    [7223408]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Под чтениями вообще-то имелось ввиду IO statistics
25 май 09, 14:57    [7223443]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1050
Glory
Под чтениями вообще-то имелось ввиду IO statistics

Если вы имеете ввиду SET STATISTICS IO ON/OFF то

без хинта:
Table '_AccumReg6151'. Scan count 1, logical reads 428, physical reads 0, read-ahead reads 17, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

c хинтом:

Table '_AccumReg6151'. Scan count 1, logical reads 1008, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Не пользовался этим и не могу понять, что эффективнее.
25 май 09, 15:18    [7223600]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
Glory
Member

Откуда:
Сообщений: 104760
VladimirKr
Glory
Под чтениями вообще-то имелось ввиду IO statistics

Если вы имеете ввиду SET STATISTICS IO ON/OFF то

без хинта:
Table '_AccumReg6151'. Scan count 1, logical reads 428, physical reads 0, read-ahead reads 17, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

c хинтом:

Table '_AccumReg6151'. Scan count 1, logical reads 1008, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Не пользовался этим и не могу понять, что эффективнее.

logical reads 428 всяко мешьше logical reads 1008
25 май 09, 15:22    [7223629]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1050
Glory
logical reads 428 всяко мешьше logical reads 1008

:) Предполагается, что таблица будет расти быстро и процент отобранных по условию записей в запросе будет уменьшаться. Можно ли надеяться, что если не указывать хинт, то в нужный момент, индекс подхватится?
К сожалению, нет времени экспериментировать.
25 май 09, 15:29    [7223671]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
вот когда будет столько записей, тогда и проверите план запроса.
а пока на все воля сервера.

для спящего время бодрствования равносильно сну
25 май 09, 16:04    [7223918]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
VladimirKr
Glory
logical reads 428 всяко мешьше logical reads 1008

:) Предполагается, что таблица будет расти быстро и процент отобранных по условию записей в запросе будет уменьшаться. Можно ли надеяться, что если не указывать хинт, то в нужный момент, индекс подхватится?
К сожалению, нет времени экспериментировать.
Добейтесь, чтоб из плана (который с хинтом) ушла строка:
|--RID Lookup(OBJECT:([db].[dbo].[_AccumReg6151]), SEEK:([Bmk1000]=[Bmk1000]) LOOKUP ORDERED FORWARD)
Как это сделать - вам уже подсказали. Скорее всего, после изменения индекса и хинт серверу уже не понадобится, и логических чтений стане меньше, по сравнению с обоими вашими случаями.
26 май 09, 06:34    [7226042]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1050
tpg
Добейтесь, чтоб из плана (который с хинтом) ушла строка:
|--RID Lookup(OBJECT:([db].[dbo].[_AccumReg6151]), SEEK:([Bmk1000]=[Bmk1000]) LOOKUP ORDERED FORWARD)
Как это сделать - вам уже подсказали. Скорее всего, после изменения индекса и хинт серверу уже не понадобится, и логических чтений стане меньше, по сравнению с обоими вашими случаями.

Да, спасибо. Я бы с радостью реорганизовал индексы, но не могу я менять структуру таблиц 1С8.1.
Да и индексированное представление на такую таблицу вешать не хочется - 1C и так уже подтормаживает...
Ладно. И так пока сойдет на фоне той дичи, на фоне той дичи, которую делает 1С.
26 май 09, 09:14    [7226250]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли избавиться от TableScan?  [new]
iljy
Guest
VladimirKr
tpg
Добейтесь, чтоб из плана (который с хинтом) ушла строка:
|--RID Lookup(OBJECT:([db].[dbo].[_AccumReg6151]), SEEK:([Bmk1000]=[Bmk1000]) LOOKUP ORDERED FORWARD)
Как это сделать - вам уже подсказали. Скорее всего, после изменения индекса и хинт серверу уже не понадобится, и логических чтений стане меньше, по сравнению с обоими вашими случаями.

Да, спасибо. Я бы с радостью реорганизовал индексы, но не могу я менять структуру таблиц 1С8.1.
Да и индексированное представление на такую таблицу вешать не хочется - 1C и так уже подтормаживает...
Ладно. И так пока сойдет на фоне той дичи, на фоне той дичи, которую делает 1С.

Менять структуру таблицы не надо! я же уже писал - сделайте индекс непосредственно на view! С нужным порядком колонок и включенными дополнительными, чтобы оно вообще исходную таблицу не сканило.
26 май 09, 10:42    [7226819]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить