나는 uniqueidentifier가있는 SQL 서버 세계에서 왔습니다. oracle에 상응하는 것이 있습니까? 이 열은 자주 쿼리되므로 성능이 핵심입니다.Oracle에 GUID를 어떻게 저장해야합니까?
.Net에서 GUID를 생성 중이며이를 Oracle에 전달할 예정입니다. 몇 가지 이유로 오라클에서 생성 할 수 없으므로 시퀀스를 사용할 수 없습니다.
나는 uniqueidentifier가있는 SQL 서버 세계에서 왔습니다. oracle에 상응하는 것이 있습니까? 이 열은 자주 쿼리되므로 성능이 핵심입니다.Oracle에 GUID를 어떻게 저장해야합니까?
.Net에서 GUID를 생성 중이며이를 Oracle에 전달할 예정입니다. 몇 가지 이유로 오라클에서 생성 할 수 없으므로 시퀀스를 사용할 수 없습니다.
CREATE table test (testguid RAW(16) default SYS_GUID())
This blog 상대적 성능을 연구했다.
Oracle에는 고유 식별자가 없습니다.
RAW (종류의 통증) 또는 CHAR을 사용하여 직접 구현할 수 있습니다. CHAR 필드에서 JOIN하는 쿼리의 성능은 정수를 사용하는 것과 비교할 때 (아마도 40 % 정도) 어려움을 겪을 것입니다.
분산/복제 데이터베이스를 수행하는 경우 성능이 저하 될 수 있습니다. 그렇지 않으면 그냥 정수를 사용하십시오.
오라클을 사용하는 일반적인 방법은 인공 키를 만드는 것입니다. 이것은 숫자로 정의 된 열입니다. 시퀀스를 통해 채워집니다. 기본 키 정의를 통해 인덱싱/제한됩니다.
질문을 제대로 이해하면 db에 행을 삽입 할 때 고유 한 ID를 생성하려고합니다.
이렇게하려면 시퀀스을 사용할 수 있습니다. 당신이 당신의 순서를 만든 후에 link here
당신은 다음과 같이 사용할 수 있습니다 : MSSQL에 오라클에서 사용
INSERT INTO mytable (col1, col2) VALUES (myseq.NEXTVAL, 'some other data');
GUID를하지, 우리는 경향이 숫자 필드 (null가 아닌 & 기본 키)가하려면 시퀀스 및 그것을 삽입하기위한 삽입 (모든 테이블에 대한 트리거).
다른 사람들과 마찬가지로 숫자 시퀀스와 비교하여 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의.
RAW (16)는 uniqueidentifier MS SQL 유형에 대해 선호되는 동일합니다.
블로그는 sequence.nextval과 함께 작동하도록 apposed 된 db에서 생성 된 guid 와만 비교합니다. 그러나 .net 코드에서 생성 된 guids로 작업 할 때 성능이 얼마나되는지 궁금합니다 ??? – gillyb
그는 내가 대답 한 후 두 번째 단락에 그 설명을 추가했습니다. 인덱스의 크기와 .Net GUID의 무작위 측면으로 인해 인덱스가 분할된다는 사실 때문에 삽입시 성능이 저하 될 수 있습니다. 원시 Oracle 함수가 사용되는 경우 SQL Server의 함수와 유사한 것을 피하기 위해 순차적으로 배열됩니다. – Turnkey
근원을 가진 간결한 응답을 위해 +1, 그러나'디폴트 SYS_GUID()'의 목적은 무엇입니까? 나는 기사를 훑어 보았고, 그 부분이 무엇을위한 것인지 분명하지 않다. – zarose