Once the Indexed view is created, its data will be stored in your database the same as any other clustered index, so the storage space for the view’s clustered index should be taken into consideration.
Having the indexed view’s clustered index stored in the database, with its own statistics created to optimize the cardinality estimation, different from the underlying tables’ statistics, the SQL engine will not waste the time substituting the source tables’ definition in the main query, and it will read directly from the view’s clustered index.
Also, it is not allowed to refer to other views and tables in other databases in the view definition.
You can’t use the text, ntext, image and XML, data types in your indexed views.
If you are using SQL Server Enterprise edition, SQL Server Query Optimizer will automatically consider the created clustered index as an option in the execution plan if it is the best index found. In the other SQL Server editions such as Standard edition, the SQL Server Query Optimizer will access all the underlying source tables and use its indexes.
In order to force the SQL Server Query Optimizer to use the index view’s clustered index in the execution plan for the query, you should use the WITH (NOEXPAND) table hint in the FROM clause.
There are some limitations when you create an indexed view.
You can’t use EXISTS, NOT EXISTS, OUTER JOIN, COUNT(*), MIN, MAX, subqueries, table hints, TOP and UNION in the definition of your indexed view.Float data type can be used in the indexed view but can’t be used in the clustered index.If the Indexed view’s definition contains GROUP BY clause, you should add COUNT_BIG(*) to the view definition Another restriction on creating an indexed view is that there are a few SET options that should have certain values in your database if you manage to create an indexed view in it. Non-deterministic columns can’t be used in the indexed view definition.Creating indexed views differs from creating normal views in that using the SCHEMA BINDING hint is not optional.This means that you will not be able to apply structure changes on the tables that may affect the indexed view unless you alter or drop that indexed view first.These are the columns that don’t return the same value each time, like the GETDATE() function.