2008-09-30 8 views
40

나는 uniqueidentifier가있는 SQL 서버 세계에서 왔습니다. oracle에 상응하는 것이 있습니까? 이 열은 자주 쿼리되므로 성능이 핵심입니다.Oracle에 GUID를 어떻게 저장해야합니까?

.Net에서 GUID를 생성 중이며이를 Oracle에 전달할 예정입니다. 몇 가지 이유로 오라클에서 생성 할 수 없으므로 시퀀스를 사용할 수 없습니다.

답변

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

This blog 상대적 성능을 연구했다.

+0

블로그는 sequence.nextval과 함께 작동하도록 apposed 된 db에서 생성 된 guid 와만 비교합니다. 그러나 .net 코드에서 생성 된 guids로 작업 할 때 성능이 얼마나되는지 궁금합니다 ??? – gillyb

+0

그는 내가 대답 한 후 두 번째 단락에 그 설명을 추가했습니다. 인덱스의 크기와 .Net GUID의 무작위 측면으로 인해 인덱스가 분할된다는 사실 때문에 삽입시 성능이 저하 될 수 있습니다. 원시 Oracle 함수가 사용되는 경우 SQL Server의 함수와 유사한 것을 피하기 위해 순차적으로 배열됩니다. – Turnkey

+0

근원을 가진 간결한 응답을 위해 +1, 그러나'디폴트 SYS_GUID()'의 목적은 무엇입니까? 나는 기사를 훑어 보았고, 그 부분이 무엇을위한 것인지 분명하지 않다. – zarose

0

Oracle에는 고유 식별자가 없습니다.

RAW (종류의 통증) 또는 CHAR을 사용하여 직접 구현할 수 있습니다. CHAR 필드에서 JOIN하는 쿼리의 성능은 정수를 사용하는 것과 비교할 때 (아마도 40 % 정도) 어려움을 겪을 것입니다.

분산/복제 데이터베이스를 수행하는 경우 성능이 저하 될 수 있습니다. 그렇지 않으면 그냥 정수를 사용하십시오.

0

오라클을 사용하는 일반적인 방법은 인공 키를 만드는 것입니다. 이것은 숫자로 정의 된 열입니다. 시퀀스를 통해 채워집니다. 기본 키 정의를 통해 인덱싱/제한됩니다.

3

질문을 제대로 이해하면 db에 행을 삽입 할 때 고유 한 ID를 생성하려고합니다.
이렇게하려면 시퀀스을 사용할 수 있습니다. 당신이 당신의 순서를 만든 후에 link here
당신은 다음과 같이 사용할 수 있습니다 : MSSQL에 오라클에서 사용

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

GUID를하지, 우리는 경향이 숫자 필드 (null가 아닌 & 기본 키)가하려면 시퀀스 및 그것을 삽입하기위한 삽입 (모든 테이블에 대한 트리거).

6

다른 사람들과 마찬가지로 숫자 시퀀스와 비교하여 GUID를 사용하면 성능이 저하됩니다. 즉, 원 상당을 제공하는 오라클 8i를 이후 "SYS_GUID()"가능이라는 함수가 말했다 :

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 ; 
/

따라서 상호 교환을 반환을 문자열 :주의의 참고는 일부 오라클 플랫폼 GUID를의 유사하지만 여전히 고유 한 값을 반환 할 것을해야한다

SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ; 

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

Steven Feuerstein의.

2

RAW (16)는 uniqueidentifier MS SQL 유형에 대해 선호되는 동일합니다.

관련 문제