カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
RailsのPaginationって、result setをfetchする段階でcursor位置をずらしてるの?
いえ、SQL の段階で LIMIT (や OFFSET)を指定します。
scaffold で作成したページは pagination を使いますので developement 環境で動かして、log/development.log を tail -f すれば LIMIT つきの SQL を発行していることがわかります。
コードで言えば、actionpack の lib/action_controller/pagination.rb の find_collection_for_pagination メソッドで limit や offset が指定されていることが確認できます。
じゃあ具体的にどこが問題になっているのかと言われますと良くわかりません。そうかなと思うところは、count_collection_for_paginationです。pagination 対象となるアイテム全体の数を数えるため、レコード数が多くかつ抽出条件が複雑だと重い SQL になりそうです。
rails 識者の方わかりますでしょうか?
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).
トラックバック&調査ありがとうございます。<br>あとはSQLがcount(*)になるということ位しか思いつきませんねぇ(Indexが効かない場合があるんだったはず)。<br>本来はcount(indexの効いたカラム)とすべきだと思うのですが、Djangoを含めそうなっているORMは見かけません。<br>問題点が明らかになって、日本のRails使いが皆動作を認識している状態になると良いですね。Djangoにも同じ問題があればDjango使いにも大いなるメリットがありますし、助かります。
今度はpaginateのhelperが良くないという話になっていますね。やりとりが落ち着いて結論が出てから議論を読もうかと思います。彼らがコードで問題点を示してくれればわかりやすいのですが……