Answers:
如果在表的聚集索引上设置压缩(页面或行),是否与在表上设置压缩相同?
是。
从MSDN:
使用REBUILD WITH语法可以重建整个表,包括分区表中的所有分区。如果表具有聚簇索引,则REBUILD选项将重建聚簇索引。
SQL Server提供了两种选择,这表明它们是不同的
两种语法都存在的原因是,表不一定具有聚簇索引。换句话说,ALTER INDEX ALL ON ... REBUILD
它不会影响堆(尽管它将接触所有非集群的堆),因此另一条路由可以达到这一目的。
此外,尽管文档中没有明确说明,但ALTER TABLE ... REBUILD
语法并未启用/禁用表上所有非聚集索引的压缩。它仅影响堆或聚集索引。
最后,如果您正在通过SSMS进行测试,请注意禁用压缩时可能会出现错误 -编写脚本脚本,以便您了解实际情况。
聚集索引是表。因此,将其设置为任意一个都是相同的。您可以通过在此处比较两种情况来验证这一点:
SELECT OBJECT_NAME(p.object_id),*
FROM sys.partitions AS p
INNER Join sys.indexes AS i
ON p.object_id = i.object_id
AND p.index_id = i.index_id
WHERE p.data_compression > 0;
SQL Server还提供了几种使列唯一的方法:
CREATE TABLE dbo.foo1(bar INT UNIQUE);
...要么...
CREATE TABLE dbo.foo2(bar INT, CONSTRAINT x2 UNIQUE(bar));
...要么...
CREATE TABLE dbo.foo3(bar INT);
ALTER TABLE dbo.foo3 ADD CONSTRAINT x3 UNIQUE(bar);
...要么...
CREATE TABLE dbo.foo4(bar INT);
CREATE UNIQUE INDEX x4 ON dbo.foo4(bar);
这些最终都将具有相同的基础实现(具有不同的名称)。
仅仅因为有不同的上班方式并不意味着您仍然不会在办公室工作。:-)