Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot create index on view 'View_Table_Name' because the view is not schema bound

I am using Views in my stored Procedure(SQL-Server). For Improving Performance, I have tried to created INDEX of that View.

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER VIEW VW_Table_Name AS SELECT Col1,Col2,Col3 FROM Table_Name  GO CREATE UNIQUE CLUSTERED INDEX Index_Name ON [VW_Table_Name](Col1) GO 

Here I am getting the Error like

Msg 1939, Level 16, State 1, Line 1 Cannot create index on view 'VW_FML' because the view is not schema bound.

Can we created Index for View in SQL Server ?

like image 379
Jagadeesh Avatar asked Dec 14 '11 14:12

Jagadeesh


People also ask

Can you create index on view?

Indexes can only be created on views which have the same owner as the referenced table or tables. This is also called an intact ownership-chain between the view and the table(s). Typically, when table and view reside within the same schema, the same schema-owner applies to all objects within the schema.

Can we create index on view without Schemabinding?

You Can't… The view is created with the WITH SCHEMABINDING option. You can't always predict what the query optimizer will do. If you're using Enterprise Edition, it will automatically consider the unique clustered index as an option for a query – but if it finds a “better” index, that will be used.

How do I create a Schemabinding view in SQL Server?

The view definition itself must first be modified or dropped to remove dependencies on the table that is to be modified. When you use SCHEMABINDING, the select_statement must include the two-part names (schema. object) of tables, views, or user-defined functions that are referenced.

What is Schemabinding in SQL views?

WHAT IS SCHEMA BINDING? Schema binding refers to the process of associating a database view to underlying tables in order to put indexes directly on the view. This may lead to great performance benefits when using the view; however, this tighter coupling is not without drawbacks.


2 Answers

There are a number of restrictions on indexed views: no subqueries, no unions, no outer joins, etc. See this article for more details. But for your case, you simply need to create the view with schema binding.

CREATE VIEW VW_Table_Name WITH SCHEMABINDING AS SELECT Col1,Col2,Col3 FROM Table_Name  GO 
like image 149
Joe Stefanelli Avatar answered Sep 30 '22 20:09

Joe Stefanelli


Because you are trying to create an Indexed View or Materialized View. Its mandatory for a view to have "WITH SCHEMABINDING" option if you are creating a Clustered Index on top of it.

A view is nothing but a stored query, if you are going to create an index on it, then the index is going to use that query and execute it on that table, in this case you have to make sure that the table does not change underneath. Thus by enforcing this constraint SQL Server makes sure everything remains in sync.

like image 34
Manoj Pandey Avatar answered Sep 30 '22 19:09

Manoj Pandey