私は既知のGUIDを保存して取得してレコードを追加した後、レコードのIDを取得するデータベースに取り組んでいます。私のアプリケーションはSQL ServerとOracleの両方で動作するので、@@ IDENTITY *は使用できません。テーブルを更新するためにGUID列が使用されました。インデックスを作成する必要がありますか?
言ってやる例えば、私は新しいアドレスを追加します
ID (identity column in SQL Server;sequenced/trigger column in Oracle)
... address data... (street, town, postcode, etc.)
GUID
私は次のようにしてIDを取り戻す:パート1で
1. INSERT INTO ADDRESS (... address details, GUID = {some new GUID value})
2. SELECT ID FROM ADDRESS WHERE GUID = {my GUID value}
3. UPDATE ADDRESS SET GUID = NULL WHERE GUID = {my GUID value}
を、私はアドレスの詳細を追加していると、データベースにGUID値を設定する。パート2でIDを取得しています。パート3では、GUID値をデータベースから削除しています(重複したGUIDが発生することはほとんどありません)。
私は3番目のビットのためのSQL Server 2008の推定実行プランを見てみると、私はGUID列にはインデックスがない場合、それは次のパスを示しています
と次のパスI場合をGUID列に索引を持っている:
私の質問です:私は2番目の画像に示すシークとして最初の画像に示されているスキャンが良くないことを認識しますが、 GUID列が本質的に空の99.999%ということは、常に断片化されリソースを浪費するため、フィールドのインデックスを作成すべきではないということですか?それとも、インデックス全体のスキャンを行う必要がなく、私が追加したばかりのGUIDがどこにあるのかがわかりやすいので、インデックスはまだ役立ちますか?
要約:GUIDが追加され、すぐに削除されるという事実を考えれば、GUID列のインデックス作成には何らかのポイントがありますか?
*デザインは自分のものではないため、別の方法を使用することはできません。しかし、私の特定のデータベースの設計が私の全体的な質問に影響しないことがわかります。
SQLでは、NEWIDを使用して新しいGUIDを選択できます。 NEWIDはランダムであるため、索引のバイナリ・ツリーのどこにでも表示できるため、NEWIDと索引付けには問題があります。 http://msdn.microsoft.com/en-us/library/ms190348.aspx – David
ID列の値を受け取るためにこのような手法を使用していますか? MSのSQLと私はあまりにも多くの便利で迅速なIDを取得する方法がありますOracleで信じている。 OracleとMS SQL – elevener