各位好。例如,视图v_tt的大致定义如下:
select a.id,a.name,a.pid,b.id,b.name from a,b where a.id = b.idid,pid上均有索引。我要做下面这样的查询,是否能用到pid的索引?如果不行,应如何做(视图结构不能修改)。
select * from v_tt where pid = xxx;谢谢!
select a.id,a.name,a.pid,b.id,b.name from a,b where a.id = b.idid,pid上均有索引。我要做下面这样的查询,是否能用到pid的索引?如果不行,应如何做(视图结构不能修改)。
select * from v_tt where pid = xxx;谢谢!
参考一下
CREATE TABLE TB (ID INT PRIMARY KEY NOT NULL)
GO
INSERT TB SELECT 1
GO
CREATE VIEW V
AS
SELECT * FROM TB
GO
SET SHOWPLAN_TEXT ON
GO
SELECT * FROM V WHERE ID=1/*StmtText
-----------------------
SET SHOWPLAN_TEXT ON(所影响的行数为 1 行)StmtText
-----------------------------
SELECT * FROM V WHERE ID=1(所影响的行数为 1 行)StmtText
-------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Seek(OBJECT:([dbdb].[dbo].[TB].[PK__TB__5008A86A]), SEEK:([TB].[ID]=Convert([@1])) ORDERED FORWARD)(所影响的行数为 1 行)
sql os处理时依然会检查基础对象(依赖项),优化器也是基于依赖项进行优化。
但是优化器会选择是否使用索引。