RDBMSではORDER句を使わなければ、行を入力した順番で取得することができないと聞きました。しかし、時系列のデータをその順で取得する必要が頻繁にある場合、毎回ソートしていたのでは時間がかかりますよね?そういう場合はどう対処するのでしょうか?

ユーザーが一人でトランザクションの処理も必要ないので、いっそRDBMSを使わないでカンマ区切りなどでファイルに出力した方がいいのかも知れないと思っています。

回答の条件
  • 1人2回まで
  • 登録:2006/07/21 02:19:46
  • 終了:2006/07/28 02:20:14

回答(3件)

id:Allashe No.1

Allashe回答回数59ベストアンサー獲得回数52006/07/21 07:28:25

ポイント27pt

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

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

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

 

id:GreatAmigo No.2

GreatAmigo回答回数18ベストアンサー獲得回数12006/07/21 11:09:04

ポイント27pt

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

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

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

id:ito-yu No.3

ito-yu回答回数323ベストアンサー獲得回数142006/07/21 11:22:34

ポイント26pt

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

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません