【发布时间】:2010-10-20 15:41:52
【问题描述】:
我的架构中的所有表都有一个 dbo 前缀。现在在我的 sql 语句中,我不喜欢一直使用 dbo.tablename。是否有任何变通方法或配置更改?
【问题讨论】:
标签: sql-server
我的架构中的所有表都有一个 dbo 前缀。现在在我的 sql 语句中,我不喜欢一直使用 dbo.tablename。是否有任何变通方法或配置更改?
【问题讨论】:
标签: sql-server
其实你应该离开那些 dbo。语句,因为您的 SQL 会更快,因为优化器不必查找架构
也可以查看此链接Performance Impact of Procedure Calls without Owner Qualification
【讨论】:
离开dbo实际上是有益的。前缀到位 - 毕竟,在 SQL Server 中,您可以有多个具有相同表名的模式(“dbo.”thingie),例如dbo.MyTable、joe.MyTable、frank.MyTable。
如果您随后从 MyTable 发出 SELECT(字段列表),SQL Server 必须首先确定您真正指的是哪个“MyTable”表 --> 这需要时间,立即指定您想要的“dbo” .MyTable”将为您节省时间。
好的,单个查询不是很多 - 但 SELECT 查询非常频繁,而且所有这些都加起来!
马克
【讨论】:
赏金问题并不是原来的问题。
当前的答案没有包含足够的细节。
没有一个答案真正解决了如何删除 dbo 前缀或将其更改为其他内容。
dbo 是架构。您不能从表中删除架构。你可以改变它。有很多例子。这是一个:How do I move a table into a schema in T-SQL。
【讨论】:
就像这样,如果你的所有表都在 dbo 模式中
use mydatabase
go
select * from mytable
如果你有多个数据库,你也可以这样做:
select * from mydatabase..mytable
【讨论】:
不幸的是,如果您想充分利用 Microsoft SQL Server,您需要将dbo. 放在许多地方。创建视图时,您可以选择使其成为 schema-bound 视图,这意味着将在编译时检查对象名称,并且只要视图存在,它引用的对象就不能被删除. (您必须先显式删除视图。)如果视图是模式绑定的,它也可以成为索引视图。较新的 MSSQL 版本还支持模式绑定存储过程,这具有其他优势。
如果您愿意,您可以创建除 dbo 之外的其他模式。但是您仍然需要明确引用对象,例如 myschema.mytable 而不仅仅是 mytable。
对于用户定义的函数,您还需要 dbo.。
就个人而言,我想告诉 MSSQL 我不打算使用模式,我对表的单个顶级命名空间(至少在给定数据库中)的经典 SQL 方式非常满意,并且可以如果没有另外指定,请假设dbo.。但是我还没有找到方法。
【讨论】:
我认为您连接的用户必须属于 dbo 模式,然后您不必键入前缀,它会从用户所属的模式中推断出来。
【讨论】: