SQL Server和历史数据索引

SQL Server和历史数据索引,sql,sql-server,Sql,Sql Server,我在SQL Server中有一个1000万行的表,它是按日期划分的客户余额历史记录 当我按日期/所有客户和按客户/所有日期访问表时,按(结存日期,客户代码)和按(客户代码,结存日期)有两个索引 问题是:每个日期/客户只有一行,将这两个索引中的任何一个定义为唯一是否有好处,或者如果它们不是唯一的就更好?我希望在查询表时获得更好的性能,我不太关心插入。唯一/非唯一索引取决于您拥有的数据。如果您有复合唯一值,您可以使用唯一索引,它在性能上比非唯一索引好。浏览以下链接以更好地理解 唯一/非唯一索引取决

我在SQL Server中有一个1000万行的表,它是按日期划分的客户余额历史记录

当我按日期/所有客户和按客户/所有日期访问表时,按
(结存日期,客户代码)
和按
(客户代码,结存日期)
有两个索引


问题是:每个日期/客户只有一行,将这两个索引中的任何一个定义为唯一是否有好处,或者如果它们不是唯一的就更好?我希望在查询表时获得更好的性能,我不太关心插入。

唯一/非唯一索引取决于您拥有的数据。如果您有复合唯一值,您可以使用唯一索引,它在性能上比非唯一索引好。浏览以下链接以更好地理解


唯一/非唯一索引取决于您拥有的数据。如果您有复合唯一值,您可以使用唯一索引,它在性能上比非唯一索引好。浏览以下链接以更好地理解

将这两个索引中的任何一个定义为唯一索引是否有好处,或者如果它们不是唯一的,则更好

是的,但是很小。唯一索引可以更窄,因此每个非叶页上可以容纳更多的键

非唯一索引将行定位器(聚集索引键列或rowid)添加到索引键列。对于唯一索引,行定位器仅出现在叶页上

您可能应该将这些索引之一设置为聚集索引,可能使用行或页压缩,或者将表设置为聚集列存储

将这两个索引中的任何一个定义为唯一索引是否有好处,或者如果它们不是唯一的,则更好

是的,但是很小。唯一索引可以更窄,因此每个非叶页上可以容纳更多的键

非唯一索引将行定位器(聚集索引键列或rowid)添加到索引键列。对于唯一索引,行定位器仅出现在叶页上


您可能应该将其中一个索引设置为聚集索引(可能是行或页压缩),或者将表设置为聚集列存储。

声明唯一索引不会提高效率。数据完整性有所提高。你知道1000万行是多么的微小吗?这是2020年,不是1990年。您不需要性能,除非您的数据库运行在10年左右的手机上—您有性能。声明唯一索引不会提高效率。数据完整性有所提高。你知道1000万行是多么的微小吗?这是2020年,不是1990年。您不需要性能,除非您的数据库运行在10年左右的手机上-您有性能。这些是Oracle链接,我问的是SQL Server,它不是Oracle特有的,它在Oracle站点上提供的关于索引的常见讲座。这些是Oracle链接,我问的是SQL Server,它不是Oracle特有的,Oracle网站上提供了关于索引的常见讲座。