Rails Migration add_reference 多态联合索引问题

tinyfeng · 2019年03月18日 · 最后由 tinyfeng 回复于 2019年03月19日 · 438 次阅读

基于ActiveRecord::Migration[5.2]生成迁移文件

add_reference :products, :user, polymorphic: true, index: true

观察到,在 products 表生成的联合索引先通过 user_type,再通过 user_id 去查

user_type 区分度是很低的(对比user_id),我感觉不如先根据user_id查。

rails 生成的索引,先根据区分度很低的 type 去查是有什么原因吗?

共收到 4 条回复

一是最左前缀原则。其次 就算数据库进行查询优化,也应该是先用user_type 因为 user_type比user_id可能的值少。这样你明白了吗?事实上建立联合索引的时候 必须需要考虑 最左前缀原则,值少的字段优先放在前面。

BruceDing 回复

那其实是先根据区分度较低的字段来查,效率反而会高一些?学习了😅

不是先用 user_type 确定去那个表查吗?

w7938940 回复

是根据 user 查 product,不是根据 product 查 user

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册