我理解为什么索引顺序在Rails中很重要(来自答案like these),例如,如果我有:
add_index :admin_users_pages, ["user_id", "page_id"]
所以我应该把字段缩小行数"最快,但我不确定这是什么意思。假设我有2个用户,有2个唯一ID,300个页面,有300个唯一ID,哪一个更聪明的选择?假设第一个用户有150页,第二个用户有150页,索引看起来像是:
user_id page_id
1 1
1 2
1 3
或者page_id根本没有排序,只有索引,所以我应该得到类似的东西:
user_id page_id
1 143
1 93
1 31
答案 0 :(得分:1)
在你的情况下,page_id
的选择性会更好,因为它会极快地缩小行数(减少到2)。这意味着,如果您获得page_id
,则可以从表中获取2条记录,然后按user_id
过滤它们,但如果您有user_id
,那么您将获取150条记录并过滤他们。所以最好先放上'page_id'。
答案 1 :(得分:1)
如果要为给定用户找到其页面,请使用[:user_id,:page_id]。
如果您要查找给定页面的用户,请使用[:page_id,:user_id]。
如果要同时执行这两项操作,请创建[:user_id,:page_id]和[:page_id,:user_id]。
如果你有一个user_id和一个page_id,并且你想找到那一行(不是很可能的情况,恕我直言),那么对于一个平衡的树索引,你所选择的顺序并不重要。条目在第一列和第二列以及后续列的索引中排序。
在某些情况下,最有选择性的应该是第一个(对于Oracle压缩的b树索引或Oracle跳过扫描访问),但总的来说它确实无关紧要。