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

我有一个经常使用的查询,其中 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,:status]

编辑:

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

lvyinkiller 回答:如果我想返回反向顺序,是否需要主键上的索引?

一些提示,也许可以回答您的问题:

我看到您正在查询 .where(status: "succeeded"),这是 Enum 吗?这也会使查询更有效。

另外,为什么要按 id 排序?对我来说,按 created_at 订购付款似乎更合乎逻辑。

那么我想知道您是否已经用 users 定义了 paymentsadd_reference 之间的关系。这会创建外键关系,而且速度也会更快。

最后,添加一个额外的索引总是可能,但它真的取决于很多事情是否会有所作为:

专业:

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

缺点:

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

就我个人而言,我认为 add_referenceusers 之间的 payments 中的默认索引足以使用很长时间。

本文链接:https://www.f2er.com/1307.html

大家都在问