人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

RDBMSではORDER句を使わなければ、行を入力した順番で取得することができないと聞きました。しかし、時系列のデータをその順で取得する必要が頻繁にある場合、毎回ソートしていたのでは時間がかかりますよね?そういう場合はどう対処するのでしょうか?
ユーザーが一人でトランザクションの処理も必要ないので、いっそRDBMSを使わないでカンマ区切りなどでファイルに出力した方がいいのかも知れないと思っています。

●質問者: westfish
●カテゴリ:コンピュータ
✍キーワード:RDBMS ソート データ トランザクション ファイル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Allashe
●27ポイント

主キー列にソートする必要のある列を含んで、クラスタ化インデックスを作成します。

クラスタ化インデックスがあると、常にその列で整列して保存されます。つまりソートされた状態でハードディスク上に記録されますので、参照の都度ソートしない分処理が早いです。

その代わり、データ入力時にソートするので多少処理がかかりますが、ユーザがお一人ということなのでこちらのほうが良いでしょう。


2 ● GreatAmigo
●27ポイント

データを格納(INSERT)する際に、ソートした順番で格納してしまうことができます。これは、テーブル作成時にそのような構成にしてしまうことで実現できます。ORACLEの場合は「索引構成表」というテーブルを作成します。これは主キーの値順(昇順/降順は任意)でデータを格納します。

もう一方の方法は、スナップショットをテーブルとは別に作成することです。作業を行わない夜間などに、テーブルをもとにスナップショットを作成し、そのスナップショット内でソートをしておきます。ユーザはテーブルではなくそのスナップショットを参照すれば、毎回ソートする必要はありません。

なお、ソートしたビューを用意する場合は、そのビューにアクセスした場合でも毎回ソートが走ってしまいます。


3 ● ito-yu
●26ポイント

> 毎回ソートしていたのでは時間がかかりますよね?

インデックスという機能を使うことで、ソートにかかる時間は無視出来るくらい小さくなります(ゼロにはならないけど)。

CSVファイルにした場合、1000件目から10件だけ表示したい、なんてときに重いですよ。RDBMSであれば一瞬です。

http://www.postgresql.jp/document/pg721doc/reference/sql-createi...

http://dev.mysql.com/doc/refman/4.1/ja/create-index.html

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ