我在sql server中有一个表,有1000万行,它是按日期列出的客户余额历史记录。
有两个索引 (balance_date, customer_code)
通过 (customer_code, balance_date)
当我按日期/所有客户和按客户/所有日期访问表时。
问题是:每个日期/客户只有一行,将这两个索引中的任何一个定义为唯一的是否有好处,或者如果它们不是唯一的是否更好?我希望在查询表时获得更好的性能,我不太关心插入。
我在sql server中有一个表,有1000万行,它是按日期列出的客户余额历史记录。
有两个索引 (balance_date, customer_code)
通过 (customer_code, balance_date)
当我按日期/所有客户和按客户/所有日期访问表时。
问题是:每个日期/客户只有一行,将这两个索引中的任何一个定义为唯一的是否有好处,或者如果它们不是唯一的是否更好?我希望在查询表时获得更好的性能,我不太关心插入。
2条答案
按热度按时间uqcuzwp81#
将这两个索引中的任何一个定义为唯一的有好处吗?如果它们不是唯一的,那就更好了?
是的,但是很小。唯一索引可以更窄,因此每个非叶页上可以容纳更多的键。
非唯一索引将行定位器(聚集索引键列或rowid)添加到索引键列。对于唯一索引,行定位器仅出现在叶页上。
您可能应该将这些索引之一设置为聚集索引(可能使用行或页压缩),或者将表设置为聚集列存储。
dxpyg8gm2#
唯一/非唯一索引取决于您拥有的数据。如果你有复合唯一值,你可以使用唯一索引,它在性能上优于非唯一索引。浏览下面的链接以便更好地理解,
https://asktom.oracle.com/pls/apex/asktom.search?tag=unique-vs-non-unique-index
http://www.dba-oracle.com/t_index_unique_vs_non_unique.htm