在 Oracle 中,表簇是一组共享公共列并将相关数据存储在相同块中的表。当表被聚集在一起时,一个数据块可以包含来自多个表的行。例如,一个块可以存储来自employees 和departments 表的行,而不是只存储一个表中的行:
http://download.oracle.com/docs/cd/E11882_01/server.112/e10713/tablecls.htm#i25478
这可以在 SQLServer 中完成吗?
在 Oracle 中,表簇是一组共享公共列并将相关数据存储在相同块中的表。当表被聚集在一起时,一个数据块可以包含来自多个表的行。例如,一个块可以存储来自employees 和departments 表的行,而不是只存储一个表中的行:
http://download.oracle.com/docs/cd/E11882_01/server.112/e10713/tablecls.htm#i25478
这可以在 SQLServer 中完成吗?
一方面,这听起来很像视图。数据存储在表中,视图仅提供对表中由视图定义指定的那些列的访问。(因此,您的“公共列”。)
另一方面,这听起来像是数据库引擎在硬盘上存储数据的方式。在 SQL 中,这是通过 8kb 页面完成的。假设有两个完全独立的表定义,则无法将来自两个这样不同的表的数据存储在同一页面中。(如果一个 Oracle 块更接近于 OS 文件,那么它就会变成 SQL 文件和文件组,此时答案是“是”......但我怀疑这不是块的含义。)
不是基于我在这里阅读的内容。在 SQL Server 中,每个表的页面都独立于其他表的页面。
另一方面,每个表都可以选择聚集索引,这会极大地影响性能。此外,我相信分区会影响执行计划,如果两个表具有相似的分区功能,这可能会提高性能,但分区的正常目标不是出于性能原因。
通常,JOINS 的优化涉及索引策略(根据我的经验,最好覆盖非聚集索引)