[PHP-users 391] DBからデータをソートして取得するには?

php-users@php.gr.jp php-users@php.gr.jp
Fri, 29 Jun 2001 11:40:45 +0900


SUMiです。

# PHPかPGSQLかどちらに投稿しようか迷ったのですが…

環境:
PHP-3.0.15-i18n+Apache+pgsql7.0.1(DBは別サーバ)


DBのテーブルの中身:
tbl_update
id		ユーザーのID
update_time	更新した日時

レコードは不定期に追加され、update_timeも随時更新される


やりたいこと:
1)DBからデータをupdate_timeでソートして取り出し、
2)特定の件数ずつ改ページを行いながら表示


思いついたこと:
1)
SELECTをかける際に毎回 ORDER BY する
問題点)
クエリーのパフォーマンスの低下が激しすぎ。


2)
SELECTで全レコードを引っ張り、PHP側でソート
問題点)
メモリ・CPU負荷ともに無駄が多すぎ。


3)
tbl_update とは別に tbl_update_query というSELECTをかける
専用のテーブルを作成し、定期的に
delete from tbl_update_query;
insert into tbl_update_query select * from tbl_update
  order by tbl_update.update_time desc;
で、tbl_update_queryは必ずupdate_timeでソートされている状
態にし、SELECTするときにはOFFSETとLIMITを設定する。
問題点)
deleteした後とinsertが完了するまでに時間がかかるので、PHP
側から表示をするときにデータが0件の状態になることがある。
また、リアルタイムなデータが取れない。

4)
3の改良案で
select * into tbl_update_query_temp from tbl_update order
by update_time;
drop table tbl_update_query;
alter table tbl_update_query_temp rename tbl_update_query;
を定期的に行う。
問題点)
やはり、リアルタイムなデータは取れない。


という状況にあります。
このような場合、どのようにすれば、リアルタイムなソートされ
たデータを表示してやることができるのでしょうか?
また、このようなケースの場合、みなさんはどのように実装され
ているのでしょうか?

お教え願います。