一个库下面有两张表,一个是dbo.test  一个guest.test
select * from test
select * from dbo.test两个结果出来的都是dbo.test这张表
我想请教一下,两个之间有没有性能上的差异?会不会检索完dbo的架构以后,还会去检索guest的架构?
求解~~

解决方案 »

  1.   

    select * from test
    这个应该是检索你当前用户下的表不会另行检索其他架构下的表不知道对不对
      

  2.   

    如果是用另外一个管理员账号登陆的呢?是不是要先检索本用户下的表,然后才会去检索dbo?
      

  3.   

    在执行语句的分析阶段:
    在没有显式指定架构名的情况下,第一条语句会首先检查执行语句的用户的默认架构下是否存在 test 表,然后再检查 dbo 架构下是否存在 test 表。在显式指定架构名的情况下,第二条语句会直接检查 dbo 架构下是否存在 test 表。性能显而易见。
      

  4.   

    查询计划 ctr+L,没有影响。
      

  5.   

     您的理解有误。
    首先先检索本用户下的表是正确的,在架构名帐号登录下(这里假设guest为架构名)
    select * from test 等价于 select * from guest.test
    然后才会去检索dbo是错误的,因为通常架构名不会赋予类似或超过sa的权限,所以无法查询dbo.test。
    即是说select * from dbo.test会报错。
      

  6.   

    不清楚是否对性能是否一定有影响。
    但xman_78tom的理解也有点问题:
    执行语句与登录帐号有关,比如用sa登录,执行
    select * from test 等价于 select * from dbo.test
    --(假设guest为架构名)此时不执行含架构名的表是不会访问guest.test,也就说访问表必须指定,此时没有什么先访问后访问之说。
    select * from guest.test    (假设guest为架构名)如果用guest登录,结果看7F,所以也不存在先访问guest.test 再访问dbo.test之说。
      

  7.   

    因为首先您是dbo登录即sa登录,此时
        select * from test  =  select * from dbo.test所以结果相同。
      

  8.   

    请仔细看看我的解释,再做评判!!!在执行语句的分析阶段:(生成分析树的阶段!!!)
    在没有显式指定架构名的情况下,第一条语句会首先检查执行语句的用户的默认架构(也就是登陆帐户所对应的)下是否存在 test 表,然后再检查 dbo 架构下是否存在 test 表。

    在显式指定架构名的情况下,第二条语句会直接检查 dbo 架构下是否存在 test 表。