[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;
を定期的に行う。
問題点)
やはり、リアルタイムなデータは取れない。
という状況にあります。
このような場合、どのようにすれば、リアルタイムなソートされ
たデータを表示してやることができるのでしょうか?
また、このようなケースの場合、みなさんはどのように実装され
ているのでしょうか?
お教え願います。