1

我有这个简单的表:

桌子Users

userId    |  name    
--------------------- 
 1             'a1'   
 2             'a2'    
 3             'a3'    
 4             'a4'    
 5             'a5'     

桌子Cities

cityId    |  name    
--------------------- 
 1             'c1'   
 2             'c2'    
 3             'c3'    
 4             'c4'    
 5             'c5'   

每个用户可以在多个 城市。:

所以映射表是:

userId    |  CityId    
------------------------------------
 1             4    
 1             4    
 1             4    
 2             5    
 5             6    

users按名称大量扫描。

问题 :

对于映射表,我没有问题。两列一起是主/聚集索引。

但我在前两张桌子上苦苦挣扎:

  • 我认为用户应该将userId列作为主键。为什么 ?因为它是通过连接到映射表来使用的。
  • 但我还需要名称列上的聚集索引,因为该表按名称进行了大量扫描。

(抛开独特的问题。假设所有列都是唯一的)

这种情况下的最佳实践决定是什么?

4

1 回答 1

2

最佳决策取决于您如何准确地使用查询返回的数据。

聚集索引意味着页面文件中的数据是基于该索引进行排序的。

常规索引将拥有自己的页面文件来排序索引和指向物理行的指针。

因此,对于返回一系列值而不是唯一行的这些查询,聚集索引将更好地服务。

因此,除非您对列进行大量查询like操作,否则Name最好将聚集索引保留在ID列上,因为该索引将不断被扫描并用于返回记录集以支持您的连接操作。

于 2013-06-27T23:32:29.347 回答