各位好。例如,视图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;谢谢!

解决方案 »

  1.   

    http://topic.csdn.net/t/20030402/15/1609704.html
    参考一下
      

  2.   

    谢谢楼上两位。也就是说,sql server 不会自动去走pid字段上这个索引吗?不明白为什么
      

  3.   

    你可以创建视图索引。T-SQL索引视图
      

  4.   

    SQL77 老兄,要么先你帮我测下?呵呵
      

  5.   

    你说的,都懂的。就这例子,测试下。SQL2005
      

  6.   

    优化器会自行处理, 通常情况下都会走索引。a表上的id与pid是单独索引还是复合索引,影响连接算法。
      

  7.   


    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 行)
      

  8.   


    sql os处理时依然会检查基础对象(依赖项),优化器也是基于依赖项进行优化。
      

  9.   

    应该是能够用到id 和pid 的索引的
    但是优化器会选择是否使用索引。