首先创建了一个nft表,创建8个列,每个列的类型是text,内容为:a*1000, 创建100万条数据。
(之前创建的1000w条测试数据被删除了。只能创建临时的数据了。最初的内容:a*10000, 但是进程卡住了,就减少了一个0)
在Gemfile增加gem: fast_page, pagy, kaminari
增加路由,增加controller的方法:
class NftsController < ApplicationController
include Pagy::Backend
before_action :set_nfts_page
def query_by_ar
nfts = NFT
total_count = NFT.count
@nfts = nfts.order(id: :asc).page(@page).per(@page_size)
render json: {
nfts: @nfts,
total_count: total_count
}
end
def query_by_pagy
nfts = NFT
total_count = NFT.count
@pagy, @nfts = pagy(nfts.order(id: :asc), items: @page_size)
render json: {
nfts: @nfts,
page: @pagy.page,
page_size: @pagy.items,
total_count: total_count
}
end
def query_by_fast_page
nfts = NFT
total_count = NFT.count
@nfts = nfts.order(id: :asc).page(@page).per(@page_size).fast_page
render json: {
nfts: @nfts,
page: @page,
page_size: @page_size,
total_count: total_count
}
end
private
def set_nfts_page
@page = params[:page]
@page_size = params[:page_size]
end
方法/次数 | 1 | 2 | 3 | 4 | 5 | 平均值 | 单位: 毫秒 | |
query_by_ar | 467 | 463 | 440 | 462 | 457 | 457.8 | ||
query_by_pagy | 481 | 462 | 473 | 467 | 471 | 470.8 | ||
query_by_fasta_page | 112 | 95 | 95 | 91 | 87 | 96 | ||
每条数据6.1k. | ||||||||
方法/次数 | 1 | 2 | 3 | 4 | 5 | 平均值 | 单位: kb | 每页10条数据。 |
query_by_ar | 61.23 | 61.23 | 61.23 | 61.23 | 61.23 | 61.23 | ||
query_by_pagy | 61.26 | 61.26 | 61.26 | 61.26 | 61.26 | 61.26 | ||
query_by_fasta_page | 61.26 | 61.26 | 61.26 | 61.26 | 61.26 | 61.26 |