What is Indexed View or Materialized View?
A clustered index is the only type of SQL Server index that contains data; the clustered index on a view contains all the data that makes up the view definition. As soon as you create this clustered index, the view is materialized, meaning SQL Server allocates storage space for it which is called as Indexed view.
what happens when you create an indexed view?
The key threshold happens when you create the primary key for the view which is the unique clustered index for the view and required before you can add secondary indexes to the view.
What that does it “materializes” the view such that it is no longer just a query into your tables, but it becomes a table itself with real data. And of course, that data must be maintained to match the underlying tables.
What should be your steps for the successful implementation of indexed view?
- Verify the SET options which are required for view and table
- Verify that the view definition
- Option IGNORE_DUP_KEY must be set to OFF
- Create the view by using the WITH SCHEMABINDING option
- Create the unique clustered index on the view
- If GROUP BY is present, the VIEW definition must contain COUNT_BIG(*) and must not contain HAVING
Why does the first index on a view have to be CLUSTERED and UNIQUE?
It must be UNIQUE to allow easy lookup of records in the view by key value during indexed view maintenance, and to prevent creation of views with duplicates, which would require special logic to maintain. It must be clustered because only a clustered index can enforce uniqueness and store the rows at the same time.
Can we create a Non-clustered index on a View?
Yes, If your queries could benefit from having more than one index on the view, non-clustered indexes can also be created on the view.
When Indexed View updated?
The indexed view is updated after immediately update of base table.
Which commands/items can’t contain by Indexed View?
- text, ntext, or image columns
- MIN, MAX, COUNT(*), COUNT(), STDEV, VARIANCE, or AVG
- OUTER JOINs
- Self JOINs
- ROWSET function
- CONTAIN or FREETEXT
- COMPUTE or COMPUTE BY
Does indexed view affect insert performance?
Yes, it can hurt insert performance quite dramatically. Any index must be updated whenever there is a relevant change. A relevant change is any insert or delete and any update which affects a column which is in the index or is an included column for the index.
How frequently you require maintenance for indexed view?
It dependes, If underlying data is frequently updated, Indexed view requires maintainances.
Does Indexed view increase a lock contention?
Yes, It increases the lock contention.
Can we create a compressed Indexed view?
Yes, SQL Server 2016 supports on-disk storage compression for indexed views. By using indexed views compression, you can reduce the total disk storage space.
What do you know about a partition-aligned indexed view?
SQL Server 2016 supports defining indexed views on partitioned data. These views are called partition-aligned indexed views. By using these views, you can increase the speed and efficiency of your queries.
Do you know what is the use of NOEXPAND hint with the indexed view?
The NOEXPAND hint tells the optimizer to just use the index defined and to not look at the underlying tables that define the view that has been indexed. This may be necessary for some circumstances where the indexed view would work faster than letting the optimizer access the underlying tables.
Can we modify the underlying tables or columns if your view created with the WITH SCHEMABINDING option?
No, we can’t.