문제

나는 우리가 고유 한 식별기가있는 SQL Server 세계에서 왔습니다. Oracle에 동등한 것이 있습니까? 이 열은 자주 쿼리되므로 성능이 핵심입니다.

.NET에서 GUID를 생성하고 Oracle에 전달할 것입니다. 몇 가지 이유로 오라클에서 생성 할 수 없으므로 시퀀스를 사용할 수 없습니다.

도움이 되었습니까?

해결책

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

이 블로그 상대적 성능을 연구했습니다.

다른 팁

다른 사람들이 말했듯이, 숫자 시퀀스와 비교하여 Guids를 사용하여 성능 히트가 있습니다. 즉, "sys_guid ()"원시적 동등성을 제공하는 Oracle 8i 이후 제공됩니다.

SQL> SELECT SYS_GUID() FROM DUAL;

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

형식화 된 안내서를 반환하기 위해 함수를 만들 수 있습니다.

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를 생성하려고합니다.
당신은 a를 사용할 수 있습니다 순서 이것을하기 위해. 여기 링크
시퀀스를 만든 후에는 다음과 같이 사용할 수 있습니다.

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

RAW (16)는 분명히 고유 한 식별기 MS SQL 유형에 선호되는 동등한 것입니다.

GUIDs are not as used in Oracle as in MSSQL, we tend to have a NUMBER field (not null & primary key) , a sequence, and a trigger on insert to populate it (for every table).

There is no uniqueidentifier in Oracle.

You can implement one yourself by using RAW (kind of a pain) or CHAR. Performance on queries that JOIN on a CHAR field will suffer (maybe as much as 40%) in comparison with using an integer.

If you're doing distributed/replicated databases, the performance hit is worth it. Otherwise, just use an integer.

The general practice using Oracle is to create an artificial key. This is a column defined as a number. It is populated via a sequence. It is indexed/constrained via a primary key definition.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top