`
hideto
  • 浏览: 2683064 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

will_paginate的一个隐藏的参数:total_entries

    博客分类:
  • Ruby
阅读更多
will_paginate插件很好用,但是在Rails的development模式下查看SQL日志时发现这样的现象:
使用paginate_by_sql方法来search数据时生成这样的两条SQL语句:
SELECT COUNT(*) FROM(select a.* from table_a where ... order by id asc) AS count_table

select a.* from table_a where ... order by id asc

这样的SELECT COUNT语句的性能就很有问题了。
查看will_paginate的实现-》finder.rb:
def paginate_by_sql(sql, options)
        options, page, per_page = wp_parse_options!(options)
        sanitized_query = sanitize_sql(sql)
        total_entries = options[:total_entries] || count_by_sql("SELECT COUNT(*) FROM (#{sanitized_query}) AS count_table")

        returning WillPaginate::Collection.new(page, per_page, total_entries) do |pager|
          options.update :offset => pager.offset, :limit => pager.per_page
          add_limit! sanitized_query, options
          pager.replace find_by_sql(sanitized_query)
        end
      end

原来paginate_by_sql方法有一个:total_entries参数,这样我们可以自己写优化的不需要order by的省略很多查询条件的count语句,然后将count number作为参数:total_entries传过去即可:
def get_count_of_xxx
  count_by_sql "select count(1) from table_a a where ..."
end

def get_xxx
  paginate_by_sql "select a.* from table_a where ... order by id asc", :total_entries => get_count_of_xxx
end

这样能优化不少search方法的性能
分享到:
评论
2 楼 dazuiba 2008-04-18  
留 :total_entries 参数的目的正是在于此呀。

这是很好的api设计模式,不给我足够的信息,我也有办法做到,只是效率较低。给我足够的信息,就可以立即可以提高效率。
1 楼 xuejunjun 2008-04-17  
明天去体验下。呵呵

相关推荐

    will_paginate 2.2.2

    `will_paginate`是Rails框架中非常流行的一个分页插件,版本2.2.2是它的一个历史版本。在本文中,我们将深入探讨`will_paginate`的使用方法、功能特性以及它如何与Rails集成,帮助提升Web应用的性能和用户体验。 一...

    will_paginate分页插件

    Rails框架中,`will_paginate`是一个非常流行且强大的分页插件,它简洁易用,功能强大,能够很好地与ActiveRecord集成。本文将深入探讨`will_paginate`的使用方法、核心概念以及其实现原理。 ### 一、安装与配置 ...

    will_paginate插件下载

    2. 分页参数:除了`page`和`per_page`,还可以设置`:params`来传递额外的查询参数,`:total_entries`指定总记录数,`:count`则可以提供自定义的计数方法。 3. 分页查询优化:will_paginate支持链式查询,可以在`...

    will_paginate v2.3.11

    在Rails项目中,通过Gemfile引入will_paginate: ```ruby gem 'will_paginate', '~> 2.3.11' ``` 然后运行`bundle install`来安装。接下来,在`config/application.rb`或对应的环境配置文件中进行配置: ```ruby ...

    will_paginate-bootstrap, 将 Twitter Bootstrap 分页组件与will_paginate集成.zip

    will_paginate-bootstrap, 将 Twitter Bootstrap 分页组件与will_paginate集成 will_paginate-bootstrap不再维护我不再使用 Bootstrap 来使用 Rails,所以不幸的是,我不再接受请求请求或者维护这个库。 为了发布你...

    scaffolding+will_paginate+提供will_paginate下载

    而`will_paginate`则是一个非常流行的分页库,它与`scaffolding`结合使用,能够为你的Rails应用添加优雅的分页功能。 `will_paginate`库由Matias Berezin创建,它的设计简洁且易于使用。它不仅提供了分页的基本功能...

    will_paginate 2.1.0

    `will_paginate` 是一个非常流行的 Ruby on Rails(Rails)框架中的分页库,它为开发者提供了方便的方式来处理大量数据的分页展示。版本 `2.1.0` 是这个库的一个特定版本,包含了该库在当时的一些特性、优化和可能的...

    will_paginate_endless_scroll_example:如何使用 will_paginate gem 创建无限滚动的演示

    will_paginate 带无限滚动示例应用程序 使用gem 'will_paginate', '~> 3.0.7'实现无限/无限滚动的工作 Rails CRUD 应用程序示例。 gem 'faker'被用来为项目gem 'faker'虚假数据。 演示 现场演示: : 在本地开发中...

    will_paginate-bootstrap4:钩入will_paginate以格式化html以匹配Twitter Bootstrap 4样式

    gem 'will_paginate-bootstrap4' 用法 <%= will_paginate @clients, renderer: WillPaginate::ActionView::BootstrapLinkRenderer %> 以下选项可用(除了will_paginate中可用的选项之外): :list_classes ...

    WillPaginateExample:Ruby on Rails的Will_Paginate示例

    `Will_Paginate` 是一个非常流行的Ruby on Rails插件,用于处理大型数据集的分页。它提供了简洁、灵活的API,使得在Rails应用中实现数据库查询结果的分页变得简单易行。在本篇文章中,我们将深入探讨`Will_Paginate`...

    will_paginate:用于Rails,Sinatra,Merb,DataMapper等的分页库

    will_paginate will_paginate是一个分页库,与Ruby on Rails,Sinatra,Hanami :: View,Merb,DataMapper和Sequel集成。 安装: ## Gemfile for Rails 3+, Sinatra, and Merbgem 'will_paginate' , '~> 3.1.0' 有关...

    ruby on rails 常用插件下载

    在这个特定的场景中,我们关注的是一个名为 "will_paginate" 的插件,它是 Ruby on Rails 中用于实现高效、灵活分页功能的常用工具。 `will_paginate` 插件为 Rails 应用程序提供了一种简单而优雅的方式来处理大量...

    resume 用Ruby技术实现的search 分页的例子

    这里,`search`方法接受一个`query`参数,然后在`name`字段上执行一个SQL的LIKE操作,匹配包含`query`的用户记录。 接着,我们引入分页。Rails提供了`will_paginate`或`kaminari`这样的插件来简化分页实现。以`will...

    ruby will_paginate的用法

    新版本的will_paginate已经抛弃了这样的做法,转而使用gem的方式,本文通过建立一个名为foobar的应用来了解一下will_paginate的用法。 ============================== C:\>rails foobar -d mysql C:\>cd foobar C:\...

    rails 2.0.2 分页 需另外下载插件

    `will_paginate`是Rails社区中非常流行的一个分页解决方案,它提供了简洁的API和强大的功能。它不仅适用于Rails 2.x版本,也与后续的版本兼容。通过这个插件,你可以很容易地将数据集分页展示在网页上,同时提供链接...

    Ruby-willpaginate一个分页库可与RubyonRailsSinatraMerbDataMapper和Sequel集成

    Ruby-on-Rails、Sinatra、Merb、DataMapper 和 Sequel 这些都是 Ruby 开发领域中的关键组件,而 `will_paginate` 是一个在这些框架中广泛使用的分页库。它提供了简单、灵活的接口,帮助开发者在处理大量数据时进行...

    Python库 | flask-paginate-0.4.4.zip

    首先,通过pip安装Flask-Paginate: ```bash pip install flask-paginate ``` 接着,在你的Flask应用中引入并配置: ```python from flask import Flask, render_template from flask_paginate import Pagination...

    Python库 | mkdocs_paginate_plugin-0.0.3-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:mkdocs_paginate_plugin-0.0.3-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics