Professional Documents
Culture Documents
Indexed View
Indexed View
tr/)
(https://www.veritabani.gen.tr/2017/04/25/indexed-view-nedir-nasil-olusturulur/)
MS SQL (https://www.veritabani.gen.tr/category/microsoft-sql/) , PERFORMANS (https://www.veritabani.gen.tr/category/microsoft-sql/performans/) ,
V ew’ler normalde ver n n kend s n tutmazlar. V ew’ler ndexed v ew hale get rd ğ m zde artık ver n n kend s n tutmaya başlarlar. Bu yüzden v ew
performansı artarken v ew’ n select ett ğ tabloların nsert,update ve delete performansları azalır. Ayrıca ndexed v ew’ler ver tabanınızda ekstra
alan kaplamaya başlar. V ew’ler ndexed v ew hale get rmek ç n bazı şartlar vardır. Bu şartları aşağıda maddelere hal nde sıralayalım.
1) Schemab nd ng yapıya geç rmek ya da oluştururken schemab nd ng yapıda oluşturmak gerek r. Schemab nd ng’ n mantığı v ew’ n select ett ğ
tablolarda b r mod f kasyon değ ş kl ğ yapılamaz olması. Schemab nd ng yapıda v ew’ oluşturduktan sonra v ew’ n select ett ğ tablolardak
kolonlarda aşağıdak g b b r mod f kasyon yapılmak stend ğ nde aşağıdak g b b r hata alırsınız.
ALTER TABLE ALTER COLUMN ID fa led because one or more objects access th s column.
2 WITH SCHEMABINDING
3 AS
2 WITH SCHEMABINDING
3 AS
2) V ew’ oluşturacak Select fades nde * FROM yer ne kolonları tek tek yazmalısınız. Yoksa aşağıdak g b hata alırsınız.
3) V ew’ schemab nd ng yapıda oluşturduktan sonra lk olarak un que clustered ndex eklemen z gerek r. Un que clustered ndex ekled kten sonra
d ğer kolonlara da ndex koyab l rs n z. Aşağıdak scr pt le un que clustered ndex koyma şlem n gerçekleşt reb l rs n z.
2 ON dbo.IndexedViewOrnek(ID);
3 GO
B z örneğ m zde ID kolonu üzer nde un que clustered ndex koymayı terc h ett k. S zde bu seç m yaparken seçeceğ n z kolonun v ew’ n select
ett ğ tabloda da un que olduğundan em n olun. Yoksa aşağıdak g b hata alırsınız.
The CREATE UNIQUE INDEX statement term nated because a dupl cate key was found for the object name ‘IndexedV ewOrnek’ and the ndex
name ‘UIX_IndexedV ewOrnek’. The dupl cate key value s (182861, C740D0288EA7C45FE0407C0A04162BDD, 12685525396).
4) V ew’ oluştururken select sorgunuzda aşağıdak tabloda bel rt len fadeler kullanamazsınız.
ROWSET funct on’ları (OPENDATASOURCE, OPENQUERY, OUTER jo n çeş tler (LEFT, RIGHT,
COUNT
OPENROWSET, AND OPENXML) veya FULL)
DISTINCT STDEV, STDEVP, VAR, VARP, or AVG Common table express on (CTE)
Sparse kolon Inl ne veya mult -statement table-valued funct ons OFFSET
Örnek olarak UNION, INTERSECT veya EXCEPT kullanırsanız v ew üzer nde b r öncek maddede bahsett ğ m z un que clustered ndex’
oluştururken aşağıdak g b hata alırsınız.
Cannot create ndex on v ew ‘dbo.IndexedV ewOrnek’ because t conta ns one or more UNION, INTERSECT, or EXCEPT operators. Cons der
creat ng a separate ndexed v ew for each query that s an nput to the UNION, INTERSECT, or EXCEPT operators of the or g nal v ew.
Yada Common Table Express on kullanırsanız ndex oluştururken aşağıdak g b hata alırsınız.
Cannot create ndex on v ew “dbo.IndexedV ewOrnek” because t references common table express on “TBL_CTE”. V ews referenc ng common
table express ons cannot be ndexed. Cons der not ndex ng the v ew, or remov ng the common table express on from the v ew def n t on.
5) V ew’ler n tablo le aynı sonuç kümes n döndürmes ç n SET seçenekler ne d kkat etmen z gerek r. Çünkü farklı SET seçenekler farklı
sonuçlar doğurab l r. Örneğ n SET CONCAT_NULL_YIELDS_NULL ON fades v ew’ n başında olursa select fades nde ‘x’+null ded ğ n zde sonuç
null gelecekt r. SET CONCAT_NULL_YIELDS_NULL OFF fades v ew’ n başında olursa bu değer bu sefer x olarak dönecekt r.
Olması gereken SET seçenekler n aşağıdak tabloda göreb l rs n z. Aslında default olarak server’dak le aynı fakat
OLE DB ya da ODBC connect on kullanıyorsanız bazı değ ş kl kler yapmanız gerek yor. Aşağıdak tabloda olması gereken
değerler ve default değerler göreb l rs n z.
ANSI_NULLS ON ON ON OFF
ANSI_PADDING ON ON ON OFF
ANSI_WARNINGS* ON ON ON OFF
CONCAT_NULL_YIELDS_NULL ON ON ON OFF
QUOTED_IDENTIFIER ON ON ON OFF
6) V ew’ oluşturan select sorgusunda tabloları select ederken tablo sm n şema sm le b rl kte schema.tablename şekl nde
yazmalısınız. Bu şek lde yazmazsanız aşağıdak g b hata alırsınız.
Cannot schema b nd v ew ‘dbo.IndexedV ewOrnek’ because name ‘Ident t yOrnekTablo’ s nval d for schema b nd ng. Names
must be n two-part format and an object cannot reference tself.
7) Eğer v ew çers nde user def ned funct ons kullanıyorsanız bu fonks yonu da şema sm le b rl kte schema.funct on şekl nde
kullanmalısınız.
8) Eğer sorguda GROUP BY kullanırsanız select fades nde COUNT_BIG(*) fades n de kullanmalı, HAVING
kullanmamalısınız. Örnek olarak;
1 CREATE VIEW [dbo].[IndexedViewOrnek]
2 WITH SCHEMABINDING
3 AS
5 GROUP BY AdSoyad
Eğer ndexed v ew oluştururken Group By kullandığınızda COUNT_BIG(*) kullanmazsanız un que clustered ndex
oluşturamazsanız. Aşağıdak g b b r hata le karşılaşırsınız.
Cannot create ndex on v ew ‘Test.dbo.IndexedV ewOrnek’ because ts select l st does not nclude a proper use of
COUNT_BIG. Cons der add ng COUNT_BIG(*) to select l st.
9)Eğer v ew çers ndek select fades nde select edeceğ n z kolonları yazarken b r al as tanımlamazsanız aşağıdak g b b r hata
alırsınız.
Hatalı v ew oluşturma scr pt’ : Bu scr pt’te k hata SUM(ID) ç n b r al as tanımlanmamış olması.
2 WITH SCHEMABINDING
3 AS
5 GROUP BY AdSoyad
Hata:
Create V ew or Funct on fa led because no column name was spec f ed for column 1.
(https://www.veritabani.gen.tr/author/nuru/)
By NURULLAH ÇAKIR ()