- - PR -
最終行にinsertされない?
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-11-07 12:57
SQL Server2000を使用してDBを構築しております。
単純な質問ですが、 あるテーブルにデータをinsertした際に テーブルの最終行にデータがinsertされると思っておりましたが、 どうやらそうはなっていない場合がありました。 (100レコードのデータがあり、101件目のデータをinsertすると 101行目でないところにinsertされてしまっていた。) insert時には何かルール(?)があるのでしょうか? ご教授お願いいたします。 | ||||
|
投稿日時: 2005-11-07 13:19
こんにちは、でっちです。
SQL Serverに限らず、RDBMSではデータの登録順は保証されません。 取得時に登録順が必要であれば、登録された日時を列として追加し、ソート条件にしてあげましょう。 | ||||
|
投稿日時: 2005-11-07 13:20
ORDER BY を使いましょう。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-11-07 14:09
クラスタ化インデックスを利用するという方法もあります。
物理的にインデックス順に並びます。 | ||||
|
投稿日時: 2005-11-07 14:16
問い合わせ時に、その物理格納順序で結果が返ってくるという保証はありませんよ? テーブルスキャンならともかく、主キー以外のインデックスが利用されたらアウトでしょ。 物理実装など意識せず、すなおに order by を都度指定するのが正解。 | ||||
|
投稿日時: 2005-11-07 19:33
引用:
-------------------------------------------------------------------------------- 物理実装など意識せず、すなおに order by を都度指定するのが正解。 -------------------------------------------------------------------------------- 単純な質問で申し訳ございません。 order byとはつまり「並び替えを行い」という条件になると思いますが、 並び替えを行った結果が全く同じデータがあった場合も その行の次の行にデータはinsertされることになるのでしょうか? 例えばテーブルが以下のようになっていた場合 名称 登録日時 ・ ・ ・ ・ Z 200511070000 A 200511071834 B 200511071834 登録日時でorder byした結果が上記の場合、 次にinsertするデータが名称:C、登録日時2005年11月7日18時34分となっていた場合に Bの下にこのデータはinsertされるのでしょうか? 最終行に追加されるということとorder byの関連性が見えてきませんで・・・。 申し訳ございません。 | ||||
|
投稿日時: 2005-11-07 20:01
でっちです。
私が最初のレスで余計なこと書きすぎましたね。申し訳ないです。 まず、最初の疑問にだけお答えすると、 「Insert時にどこにデータが登録されるかはRDBMS側の仕様であり、登録位置を指定することも、事前にどこに登録されるか知ることもできません。」 となります。リソースを節約したりするロジックがあった上で決定されるのでしょうが、それが利用者側に知らされることも基本的にありません。 Order Byは、Insert結果を見る時の話です。 結果を見る(もしくは登録データを利用する)際に登録順で見たい(利用したい)のであれば、明示的にOrder Byを指定する必要がありますよ、と言うことをお伝えしたかったのですが、蛇足でしたね。 m(_ _)m [ メッセージ編集済み 編集者: でっち6号 編集日時 2005-11-07 20:08 ] | ||||
|
投稿日時: 2005-11-07 20:08
関連性はないです。無関係です。さらにどこに追加されるかはDBシステムが要用な条件を 判断して処理するので、物理的にどこに保存するかわかりません。 |
1|2|3|4
次のページへ»