- PR -

最終行にinsertされない?

投稿者投稿内容
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2006-03-28 20:08
引用:

小僧さんの書き込み (2006-03-28 19:51) より:
が、本日同僚の方から
「プライマリーキーはデフォルトでソートキーとなる」といわれました。



主キーは索引が付与されますから、索引の中では当然ソートされているでしょう。
(というかソートしなかったら索引の意味がない)

ですが、それは飽くまで索引の中の話であって、対応する表データがどこに
格納されるかは、タイミング次第です。

極端な話、エクステントの数が 100 あったとしても、第一エクステントの
適当なブロックに十分空きがあって、そこが最初に見つかれば表データの
格納に使用されます。

_________________
もしもし@RMAN 友の会
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2006-03-28 20:35
Oracle9i と書かれているのに SQL Server の話で恐縮ですが・・・。
SQL Server ではインデックスをひとつだけクラスタ化するという機能があります。クラスタ化されているインデックスはリーフノードに実際のデータを保持しますので、物理的にデータが昇順(もしくは降順)にソートされた状態で配置されます。そして、標準的操作(管理ツールでテーブルを作成すると)プライマリキーがクラスタ化されるようになっています。

Oracle でも物理的な配置を決める同様の仕組みがあるのでは?

--
追記。ただし物理的な配置にしたがって結果が返ってくるという保障はない(仕様として明記されているのを見たことがありません)ので、パフォーマンス上の理由で物理配置を調整するような設定をしていても order by は明示する必要があります。

[ メッセージ編集済み 編集者: 未記入 編集日時 2006-03-28 20:37 ]
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2006-03-29 09:37
引用:

未記入さんの書き込み (2006-03-28 20:35) より:

SQL Server ではインデックスをひとつだけクラスタ化するという機能があります。

--
追記。ただし物理的な配置にしたがって結果が返ってくるという保障はない(仕様として明記されているのを見たことがありません)ので、パフォーマンス上の理由で物理配置を調整するような設定をしていても order by は明示する必要があります。

[ メッセージ編集済み 編集者: 未記入 編集日時 2006-03-28 20:37 ]



Oracle には索引構成表というのがありますね。未記入さんの説明を読むと
SQL Server の「クラスタ化されたインデックス」とほぼ同じようなイメージに
なるのかと。

ただ、バージョンによっては結構制約が多いんで、あんまり使っているところを
見たことはないです。

_________________
もしもし@RMAN 友の会

[ メッセージ編集済み 編集者: もしもし 編集日時 2006-03-29 09:40 ]
vincent
大ベテラン
会議室デビュー日: 2004/07/09
投稿数: 142
投稿日時: 2006-03-29 10:44
主キーやインデックスの内部構造(物理的な配置)がどうであろうと、
SELECT文の結果として出てくる行になんらかの順序付けを期待してはいけません。
順序付けが必要な場合は都度ORDER BYで明示的に指定しましょう。

そもそも、SQLって内部構造を気にせずデータアクセスするための
仕組みだと思います。
小僧
大ベテラン
会議室デビュー日: 2005/06/24
投稿数: 122
投稿日時: 2006-03-29 17:09
こんばんは。

既に終了したスレッドでしたが返信頂きましてありがとうございます。
結論としては
・デフォルトソートなる機能は存在しない
・順序を意識した結果が欲しい場合は Order By を記述する
と認識しました。

その他有意義な情報、ありがとうございました。
合わせて同僚に話しておきます。
今後とも宜しくお願いいたします。

スキルアップ/キャリアアップ(JOB@IT)