一个库下面有两张表,一个是dbo.test 一个guest.test
select * from test
select * from dbo.test两个结果出来的都是dbo.test这张表
我想请教一下,两个之间有没有性能上的差异?会不会检索完dbo的架构以后,还会去检索guest的架构?
求解~~
select * from test
select * from dbo.test两个结果出来的都是dbo.test这张表
我想请教一下,两个之间有没有性能上的差异?会不会检索完dbo的架构以后,还会去检索guest的架构?
求解~~
这个应该是检索你当前用户下的表不会另行检索其他架构下的表不知道对不对
在没有显式指定架构名的情况下,第一条语句会首先检查执行语句的用户的默认架构下是否存在 test 表,然后再检查 dbo 架构下是否存在 test 表。在显式指定架构名的情况下,第二条语句会直接检查 dbo 架构下是否存在 test 表。性能显而易见。
首先先检索本用户下的表是正确的,在架构名帐号登录下(这里假设guest为架构名)
select * from test 等价于 select * from guest.test
然后才会去检索dbo是错误的,因为通常架构名不会赋予类似或超过sa的权限,所以无法查询dbo.test。
即是说select * from dbo.test会报错。
但xman_78tom的理解也有点问题:
执行语句与登录帐号有关,比如用sa登录,执行
select * from test 等价于 select * from dbo.test
--(假设guest为架构名)此时不执行含架构名的表是不会访问guest.test,也就说访问表必须指定,此时没有什么先访问后访问之说。
select * from guest.test (假设guest为架构名)如果用guest登录,结果看7F,所以也不存在先访问guest.test 再访问dbo.test之说。
select * from test = select * from dbo.test所以结果相同。
在没有显式指定架构名的情况下,第一条语句会首先检查执行语句的用户的默认架构(也就是登陆帐户所对应的)下是否存在 test 表,然后再检查 dbo 架构下是否存在 test 表。
在显式指定架构名的情况下,第二条语句会直接检查 dbo 架构下是否存在 test 表。