2017-02-15 96 views
0

也许我对这个问题的主题做了一个假设,但是,这里是情况。 我有一个相当大的表 - 540万行 - 在MySQL中,在我的Rails 4应用程序后面。 我正在使用数据表和搜索。所有这一切都很好,但will_paginate宝石正在杀死我们的表现。will_paginate和“晚排偏移”问题

orders = Order.not_pending.where("azonref like :search or sales_channel like :search", search: "%#{params[:sSearch]}%") 
orders = orders.distinct.order("#{sort_column} #{sort_direction}") 

# this next line is the killer 
orders = orders.page(page).per_page(per_page) 

我相信这是因为MySQL的和“晚行偏移”的问题,但是,如何避免这种情况的will_paginate正在生成SQL?

+0

如果您正在使用数据表,那么您应该使用其数据源选项来处理此问题。在datatables之上的分页不是一个好主意,因为它通过自己的分页来处理分页 – dstull

+0

你应该检查命令数组,它是否是有效的记录,并且排列它或排除错误 –

+0

@dstull - 你有链接到任何例子(或者关心制定这个问题的答案)?我找到的所有RoR/Datatables示例都使用will_paginate。 – phil

回答

0

这里是您更好地利用这里的数据表与导轨选项:

  1. 删除分页和完全relly上使用的数据表的 - 这有推搡一切到DOM的缺点,这会导致慢下来将数据转移到3mb左右的dom。以下是使用该示例的示例:specific js call - but look at entire project

  2. 将数据源用作ajax源或具有延迟呈现的ajax。我认为后者的可能感兴趣的你:有轨

AJAX源(利用上的数据表初始化 “Ajax” 的选项:

“AJAX”:{ “URL”:“/采样/ GET_URL /” + “一些PARAMS”, “DATASRC”: '' }

延期呈现:
https://datatables.net/examples/ajax/defer_render.html

+0

谢谢。我们无法向客户端发送300,000行数据。我们已经在做你的第二个建议。问题中的代码来自我们通过ajax加载的Rails数据表对象。这不是问题。问题在于分页。也许这不是一个数据表的问题,而是一个will_paginate问题。 – phil