[Codeigniter-users] SELECT count(*)について

Zurück zum Archiv-Index

Yuta Sakurai sakur****@gmail*****
2008年 6月 19日 (木) 01:19:25 JST


櫻井です。

最終的には、Kenjiさんの出してくれた案のうち、"SELECT ... AS ..."を使って
    $this->db->select('count(*) as count');
    $query = $this->db->getwhere(...);
    return $query->row()->count;
とするようにしました。

ありがとうございました。


  天野さん:

> count(primary key) でとった方が速いというのをどこかで聞いたことがあり
> そうしています。みなさんはどうされていますか?

なるほど、その方が速そうな印象がありますね。
僕は現状、kunitsujiさんと同じようにMyISAMでテーブル作って、COUNT(*)で
やってます。
MyISAMを知らず、ネットで拾ったSQL文にたまたまついてたので・・・。
といっても、デフォルトではMyISAMになるみたいな話も目にしましたが。
今度、どっちが速いか試してみようかな。


  kunitsujiさん:

> よくあるのが、LIMITをつけて取得件数を分けてページネーションするのですが、
> そのときに全体の件数をとる特にCOUNTを使いますが(MyISAMとか)
> 
> num_rowの場合はSQLに対しての件数ですから、LIMITで20件だと20ですね。

今回、まさにこの状況でした。
ページネーションでは全体の件数がいくつか指定する必要があるので、モデルク
ラスに
  ・表示させたいデータをLIMIT, OFFSET付きで取ってくる関数
  ・それとは別に、表示させたいデータの全ての「件数のみ」を取得する関数
を書いて、コントロールクラスから呼び出すようにしました。

> MySQLのバージョンにもよりますが
> SELECT FOUND_ROWS()
> を使っているのかとおもいました。
> まあ、num_row()であれば、結果取得に対しての件数だから正しいんでしょうか
> ね。

個人的には、その方が直感的に納得できますね。


  Kenjiさん:

> もっと強気に、メモリを増設して、
> 
> ini_set("memory_limit","1024M");
> 
> とかしてみましょう。:-)

メモリがどれだけ使えるか等は、各サーバによって異なりそうなので、一応汎用
性を考えて件数のみ取得という方向性でいってみました。
(そんなことを考える時間的余裕は、実のところないはずなんですが笑)

-- 

名古屋市立大学大学院 経済学研究科
櫻井 雄大 (Y_Sakurai)
mail: sakur****@gmail*****




Codeigniter-users メーリングリストの案内
Zurück zum Archiv-Index