質問

私は、uniqueidentifierのあるSQLサーバーの世界から来ました。 Oracleに同等のものはありますか?この列は頻繁にクエリされるため、パフォーマンスが重要です。

.NetでGUIDを生成し、Oracleに渡します。いくつかの理由により、oracleで生成できないため、シーケンスを使用できません。

役に立ちましたか?

解決

CREATE table test (testguid RAW(16) default SYS_GUID() ) 

このブログは、相対的なパフォーマンス。

他のヒント

他の人が述べたように、数値シーケンスと比較してGUIDを使用するとパフォーマンスが低下します。ただし、" SYS_GUID()という名前の関数があります。 "生の同等物を提供するOracle 8i以降で利用可能:

SQL> SELECT SYS_GUID() FROM DUAL;

SYS_GUID()
--------------------------------
248AACE7F7DE424E8B9E1F31A9F101D5

フォーマットされたGUIDを返す関数を作成できます:

CREATE OR REPLACE FUNCTION GET_FORMATTED_GUID RETURN VARCHAR2 IS guid VARCHAR2(38) ;
BEGIN
    SELECT SYS_GUID() INTO guid FROM DUAL ;

    guid :=
        '{' || SUBSTR(guid,  1, 8) ||
        '-' || SUBSTR(guid,  9, 4) ||
        '-' || SUBSTR(guid, 13, 4) ||
        '-' || SUBSTR(guid, 17, 4) ||
        '-' || SUBSTR(guid, 21) || '}' ;

    RETURN guid ;
END GET_FORMATTED_GUID ;
/

したがって、交換可能な文字列を返します:

SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ;

GET_FORMATTED_GUID()
--------------------------------------
{15417950-9197-4ADD-BD49-BA043F262180}

一部のOracleプラットフォームは、GUIDの類似するがまだ一意の値を返すことに注意する必要があります Steven Feuersteinによる記述

質問を適切に理解している場合、dbに行を挿入するときに一意のIDを生成します。
これを行うには、シーケンスを使用できます。 ここにリンク
シーケンスを作成したら、次のように使用できます。

INSERT INTO mytable (col1, col2) VALUES (myseq.NEXTVAL, 'some other data');

RAW(16)は、uniqueidentifier MS SQLタイプの推奨される同等物です。

GUIDはMSSQLほどOracleで使用されていないため、NUMBERフィールド(null&主キーではない)、シーケンス、および挿入するトリガー(すべてのテーブル)を持つ傾向があります。

Oracleにはuniqueidentifierはありません。

RAW(苦痛の種)またはCHARを使用して、自分で実装できます。 CHARフィールドでJOINを実行すると、整数を使用した場合と比較して(おそらく40%も)低下するクエリのパフォーマンス。

分散/レプリケートされたデータベースを実行している場合、パフォーマンスヒットは価値があります。それ以外の場合は、整数を使用します。

Oracleを使用する一般的なプラクティスは、人工キーを作成することです。これは、数値として定義された列です。シーケンスを介して入力されます。主キー定義を介してインデックス付け/制約されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top