Introduction
I got a mail from one of my closed friends related to "Materialized view Index not working". I am little bit confused after getting this mail. When I am getting closer look at the problem that I understand what he mean by "Materialized view Index not working" This article is related to Why in Materialized view Index is not working.
Point to focus
1. Understanding the case scenario
2. Finding the rood of the problem
3. How we fix it.
4. Related Tropics
In this article I am not going to describe related to Materialize View as we all know that how important it is in case of performance boost up. If have you any confusion visit my previous article. You can find it in related tropic options of this article.
Understanding the case scenario
Here in this article, I cannot provide the exact scenario due to some restrictions but I can create a scenario related to it. So let's see what the scenario is.
Step-1 [ Creating the Base Table ]
IF OBJECT_ID('my_BaseTable') IS NOT NULL
BEGIN
DROP TABLE my_BaseTable
END
GO
CREATE TABLE my_BaseTable
(ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
EMPNAME VARCHAR(50) NOT NULL,
GRADE VARCHAR(1) NOT NULL)
GO
Step-2 [ Now Insert Some records on our Base Table ]
INSERT INTO my_BaseTable
(EMPNAME, GRADE)
VALUES ('Mr. Sudip Das', 'A'),
('Mr. Joydeep Das', 'B'),
('Mr. Sukamal Jana', 'B'),
('Mr. Tuhin Kr. Shinah', 'C'),
('Mr. Sangram Jit', 'C'),
('Mr. Sourav Sarkar', 'D');
GO
Step-3 [ Display the Index Information ]
sp_helpindex my_BaseTable
index_name
|
index_description
|
index_keys
|
PK__my_BaseT__3214EC2766979D65
|
clustered, unique, primary key located on PRIMARY
|
ID
|
Here the UNIQUE CLUSTERED index is created.
Step-4 [ Optional -- Display the Records of the Base Table ]
ID EMPNAME GRADE
1 Mr. Sudip Das A
2 Mr. Joydeep Das B
3 Mr. Sukamal Jana B
4 Mr. Tuhin Kr. Shinah C
5 Mr. Sangram Jit C
6 Mr. Sourav Sarkar D
Step-5 [ Create the Materialize View ]
IF OBJECT_ID('View_my_BaseTable') IS NOT NULL
BEGIN
DROP VIEW View_my_BaseTable
END
GO
CREATE VIEW View_my_BaseTable
WITH SCHEMABINDING
AS
SELECT ID, EMPNAME, GRADE
FROM dbo.my_BaseTable;
Step-6 [ Create the Clustered index on the View ]
CREATE UNIQUE CLUSTERED INDEX IX_View_my_BaseTable
ON View_my_BaseTable (ID);
Step-7 [ Display the Index Information ]
sp_helpindex View_my_BaseTable
index_name
|
index_description
|
index_keys
|
IX_View_my_BaseTable
|
clustered, unique located on PRIMARY
|
ID
|
Here the UNIQUE CLUSTERED index is created.
Step-7 [ Display the Actual Execution Plan ]
In this execution plan if we see it carefully we find that the Index named "PK__my_BaseT__3214EC2766979D65" is used which is the Base Table Index (The Index of the Primary Key). The Index that is created on the View is not used.
"And this is the Problem. Why the Index of the View is not used by the MS SQL Query optimizer? "
Finding the rood of the problem
The cost of using the indexed view may exceed the cost of getting the data from the base tables, or the query is so simple that a query against the base tables is fast and easy to find. This often happens when the indexed view is defined on small tables.
How we fix it
We can use the NOEXPAND hint if we want to force the query processor to use the indexed view.
SELECT * FROM View_my_BaseTable(NOEXPAND)
Related Tropics
1. Materialize view and the performance issue
Hope you like it.
Posted by: MR. JOYDEEP DAS
No comments:
Post a Comment