如果我想返回反向顺序,我需要主键上的索引吗?



我有一个经常使用的查询,其中User模型has_many :payments:

current_user.payments.where(status: "succeeded").order(id: :desc).page(params[:page]).per(params[:size])

我是否需要按:desc顺序在主键上建立索引?

add_index :payments, [:user_id, :status], order: {id: :desc})

或者我可以省略顺序吗?

add_index :payments, [:user_id, :status]

编辑:

查询中的page()per()来自kaminari gem。我需要额外的索引吗?

一些提示,也许是对你问题的回答:

我看到你在.where(status: "succeeded")上查询,这是一个Enum吗?这也将使查询更有效。

还有,为什么要用id订购呢?在我看来,通过created_at付款似乎更合乎逻辑。

那么我想知道你是否用add_reference定义了userspayments之间的关系。这将创建外键关系,这也更快。

最后,添加一个额外的索引总是是可能的,但它真的取决于很多事情,如果它要做的区别:

职业:

  • 当数据搜索变大(不确定,像>100000行)时,查找记录将变得更快

反对:

  • 插入和更新将变得稍微慢一些(每次插入都需要一个额外的索引表来更新)

我个人认为add_referenceuserspayments之间的默认索引可以满足非常非常长的时间。

最新更新