我有这个简单的表格:
表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
列作为主键。为什么?因为它是通过连接到映射表使用的。(不考虑这个独特的问题。假设所有列都是唯一的)
此案例的最佳做法决定是什么?
答案 0 :(得分:2)
最佳决策取决于您使用查询返回的数据的准确程度。
聚簇索引意味着页面文件中的数据是根据此索引排序的。
常规索引将拥有自己的页面文件来命令索引和指向物理行的指针。
因此,聚簇索引将更好地为那些返回值范围而不是唯一行的查询提供服务。
因此,除非您在like
列上对Name
操作执行大量查询,否则最好将聚簇索引保留在ID
列上,因为此索引将不断扫描并用于返回记录集以支持您的联接操作。