Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 проблемы с созданием индекса на VIEW  [new]
Guest2003
Guest
CREATE CLUSTERED INDEX idx_vdlimit_2003_01 on 

vdlimit_2003_01(AddrTo,DepSID)

а он мне отвечает:
Cannot create index on view 'vdlimit_2003_01' because the view is not schema bound.
22 янв 03, 19:39    [112791]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Если индекс не противоречит синтаксису для индексных вьюх, то пересоздайте его с опцией WITH SCHEMABINDING
22 янв 03, 19:48    [112794]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Предыдущее следует читать как Если view не противоречит ...далее по тексту :)
22 янв 03, 19:49    [112795]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Guest2003
Guest
А в чем противоречивость может заключаться?
CREATE View vdlimit_2003_01 as

select
DepSID,
AddrTo,
sum(Byte_Count) as Byte_Count
from fulllog
where
DTBeg>='01.01.2003' and
DTBeg<'01.02.2003' and
isLoc=0 and
not(DepSID is null)
group by DepSID, AddrTo

Это не проходит:
CREATE CLUSTERED INDEX idx_vdlimit_2003_01 on 

vdlimit_2003_01 (AddrTo,DepSID)
WITH SCHEMABINDING

говорит:
'SCHEMABINDING' is not a recognized CREATE INDEX option
22 янв 03, 19:55    [112798]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Guest2003
Guest
пересоздал view с опцией WITH SCHEMABINDING
теперь при создании индекса сервер выдает:
Index on view 'TestDB.dbo.vdlimit_2003_01' cannot be created because the view requires a conversion involving dates or variants.
22 янв 03, 20:12    [112809]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Вот это надо в ON - ANSI_NULLS,ANSI_PADDING,ANSI_WARNINGS,ARITHABORT,CONCAT_NULL_YIELDS_NULL,QUOTED_IDENTIFIERS
Вот это в OFF - NUMERIC_ROUNDABORT

Даты переписать как

where
DTBeg>='20030101' and
DTBeg<'20030201' and


ByteCount не должен содержать NULL-значений

Почитайте в BOL раздел Creating an Indexed View.

Удачи!
22 янв 03, 20:37    [112817]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Да, еще - имена таблиц надо писать в формате MyDB.MyTable
И имена в полей в индексе я бы поменял на всякий случай.
22 янв 03, 20:41    [112818]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Guest2003
Guest
все сделал как в BOL
where 

DTBeg>='20030101' and
DTBeg<'20030201' and

если это во view то при создании индекса говорит:
cannot be created because the view requires a conversion involving dates or variants.
побовал дату в разных формах, в каком правильно?
22 янв 03, 21:06    [112824]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
guest2003
Guest
Вообще не дает использовать sum во view, хотя в BOL
эта функция не упомянута
22 янв 03, 21:32    [112830]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Glory
Member

Откуда:
Сообщений: 104764
В BOL упомянуто, что
"The SELECT statement in the view cannot contain these Transact-SQL syntax elements:
...
- A SUM function that references a nullable expression.
"
22 янв 03, 22:49    [112877]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Guest2003
Guest
Осталась только одна проблема с датами:
Index on view 'TestDB.dbo.vdlimit_2003_01' cannot be created because the view requires a conversion involving dates or variants
ALTER   View dbo.vdlimit_2003_01

WITH SCHEMABINDING
as
select
DepSID,
AddrTo,
sum(Byte_Count)as Byte_Count,
COUNT_BIG(*) as C
from dbo.fulllog
where
DTBeg>='20030101' and
DTBeg<'20030201' and
isLoc=0 and
not(DepSID is null)
group by DepSID, AddrTo


SET ANSI_NULLS ON

GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NUMERIC_ROUNDABORT OFF
GO

CREATE UNIQUE CLUSTERED INDEX
idx_vdlimit_2003_01
on
"dbo"."vdlimit_2003_01" (AddrTo,DepSID)
23 янв 03, 11:15    [112997]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Glory
Member

Откуда:
Сообщений: 104764
Т.е. если удалить из view фильтр по датам, то индекс создается ? Так ?
23 янв 03, 11:36    [113031]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Guest2003
Guest
Да так
23 янв 03, 11:48    [113064]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Задачка...буду пробовать, никогда с таким не встречался.
Кинте сюда что говорит select @@version
23 янв 03, 13:14    [113239]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Guest2003
Guest
Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 3)
23 янв 03, 13:34    [113264]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Вариант через анальное отверстие :


create view vTestIdxView with schemabinding as
SELECT OrderId,OrderDate FROM dbo.Orders
WHERE OrderDate BETWEEN dateadd(mi,0,'19970120') AND dateadd(mi,0,'19970520')
go
create unique clustered index idx on vTestIdxView(OrderId DESC)
go


Я попробую связаться с товарищами из Микрософта насчет этого - может это правда глюк...
23 янв 03, 13:51    [113282]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Самое интересное что запрос типа

select OrderID,OrderDate from vTestIdxView with (index(idx))


в Execution Plan показывает реальный индекс из таблицы, а не из view.
23 янв 03, 13:57    [113290]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Glory
Member

Откуда:
Сообщений: 104764
Да с датами что-то намудрено и неописано толком.
Получилось так

USE Northwind

go

CREATE view dbo.indexedview with schemabinding
as
select customerid, employeeid, sum(freight) as sum_freight, count_big(*) as cnt
from dbo.orders
where convert(char(6), orderdate, 112) = '199707'
group by customerid, employeeid
go

CREATE UNIQUE CLUSTERED INDEX idx_1 on dbo.indexedview (customerid,employeeid)


В таблице Orders поле Freight нужно сделать NOT NULL
23 янв 03, 13:57    [113292]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
У Вас convert работает ? Меня послали со словами что convert returns non-determenistic values. Я чуть со стула не упал ...
23 янв 03, 14:01    [113296]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Gena G.
Member

Откуда: Oz
Сообщений: 977
Выражение

convert(char(6), orderdate, 112) = '199707'

приведет к тому что индекс по orderdate работать не будет :(

ИМХО неплохая практика хранить даты в трех int столбцах - день,месяц, год. Или я неправ?
23 янв 03, 14:08    [113307]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Glory
Member

Откуда:
Сообщений: 104764
У Вас convert работает ?

Слева работает - справа нет с аналогичным вашему сообщением



приведет к тому что индекс по orderdate работать не будет :(

А мы вроде бы по orderdate индекс и не создаем
23 янв 03, 14:12    [113317]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Gena G.
Member

Откуда: Oz
Сообщений: 977
select customerid, employeeid, sum(freight) as sum_freight, count_big(*) as cnt

from dbo.orders
where convert(char(6), orderdate, 112) = '199707'
group by customerid, employeeid


Я про этот запрос внутри VIEW
23 янв 03, 14:16    [113322]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Guest2003
Guest
Мда... Хваленые материализованные представления от мелкософта.
Помню-помню на "ПЛАТФОРМА-2003"
Примерная Цитата: "Разработки майкрософт в области материализованных представлений ушли дальше чем в других СУБД" (подразумевался ORACLE).

Мда... и про кластерный индекс... который вовсе не кластерный оказался, поскольку кластерный подразумевает физическое размещение записей в соответствии с этим индексом. А у них эмуляция кластерного индекса в виде двухсвязнного списка (тоже на конференции рассказали).
23 янв 03, 14:58    [113373]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
Glory
Member

Откуда:
Сообщений: 104764
Ну-ка, ну-ка. Что там про кластерные индексы ? Можно поподробнее.
Т.е. фраза из BOL "In a clustered index, the data pages make up the leaf nodes." - обман ???
23 янв 03, 15:03    [113382]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с созданием индекса на VIEW  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
Это про вьюху было - интересно, а как его вообще можно реализовать по-другому ?

По поводу индекса - попробуйте мой вариант - значения все равно рассчитываются при компиляции вьюхи.

ЗЫ
Материализованные вьюхи от Оракла - тоже совсем не подарок на Рождество...
23 янв 03, 15:16    [113392]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить