2008-09-30 19 views
40

मैं SQL सर्वर दुनिया से आ रहा हूं जहां हमारे पास अद्वितीय पहचानकर्ता था। क्या ओरेकल में बराबर है? इस कॉलम को अक्सर पूछताछ की जाएगी ताकि प्रदर्शन कुंजी हो।ओरेकल में मुझे GUID कैसे स्टोर करना चाहिए?

मैं .NET में GUID उत्पन्न कर रहा हूं और इसे ओरेकल में पास कर दूंगा। कुछ कारणों से इसे ऑरैकल द्वारा उत्पन्न नहीं किया जा सकता है, इसलिए मैं अनुक्रम का उपयोग नहीं कर सकता।

उत्तर

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

This blog सापेक्ष प्रदर्शन का अध्ययन किया।

+0

ब्लॉग केवल एक अनुक्रम के साथ काम करने के लिए लगाए गए डीबी से उत्पन्न एक guid के साथ काम करने की तुलना करता है, लेकिन मुझे आश्चर्य है कि .NET कोड से उत्पन्न guids के साथ काम करते समय प्रदर्शन कैसे होता है ??? – gillyb

+0

उन्होंने उत्तर दिए जाने के बाद दूसरे पैराग्राफ में स्पष्टीकरण जोड़ा। इंडेक्स के आकार के कारण डालने पर कुछ प्रदर्शन हिट होने की संभावना है और तथ्य यह है कि इंडेक्स को नेट ग्रिड के यादृच्छिक पहलू के कारण विभाजित किया जाएगा। यदि देशी ओरेकल फ़ंक्शन का उपयोग किया जाता है तो SQL सर्वर में फ़ंक्शन के समान होने से बचने के लिए उन्हें अनुक्रमिक रूप से व्यवस्थित किया जाता है।स्रोत के साथ संक्षिप्त उत्तर के लिए – Turnkey

+0

+1, लेकिन 'डिफ़ॉल्ट SYS_GUID() 'का उद्देश्य क्या है? मैंने लेख को स्किम किया, और यह स्पष्ट नहीं है कि वह हिस्सा क्या है। – zarose

0

ओरेकल में कोई अनोखा पहचानकर्ता नहीं है।

आप रॉ (प्रकार का दर्द) या चार्ज का उपयोग करके स्वयं को कार्यान्वित कर सकते हैं। एक पूर्णांक का उपयोग करने की तुलना में एक प्रश्न क्षेत्र में शामिल होने वाले प्रश्नों पर प्रदर्शन (शायद 40% तक) भुगतना होगा।

यदि आप वितरित/प्रतिकृति डेटाबेस कर रहे हैं, तो प्रदर्शन हिट इसके लायक है। अन्यथा, बस एक पूर्णांक का उपयोग करें।

0

ओरेकल का उपयोग कर सामान्य अभ्यास एक कृत्रिम कुंजी बनाना है। यह एक स्तंभ के रूप में परिभाषित एक स्तंभ है। यह अनुक्रम के माध्यम से आबादी है। यह एक प्राथमिक कुंजी परिभाषा के माध्यम से अनुक्रमित/बाधित है।

3

यदि मैं सही तरीके से प्रश्न समझता हूं, तो आप डीबी में एक पंक्ति डालने पर एक अद्वितीय आईडी उत्पन्न करना चाहते हैं।
ऐसा करने के लिए आप अनुक्रम का उपयोग कर सकते हैं। link here
बार जब आप अपने अनुक्रम बनाया है आप इसे इस प्रकार उपयोग कर सकते हैं:

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

GUIDs के रूप में MSSQL में के रूप में ओरेकल में इस्तेमाल नहीं कर रहे हैं, हम करते हैं, वे संख्या क्षेत्र (शून्य नहीं & प्राथमिक कुंजी) के लिए, एक अनुक्रम, और इसे पॉप्युलेट करने के लिए सम्मिलित एक ट्रिगर (प्रत्येक तालिका के लिए)।

6

जैसा कि अन्य ने कहा है, संख्यात्मक अनुक्रमों की तुलना में GUID का उपयोग करके एक प्रदर्शन हिट है। जिसके अनुसार, Oracle 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 ; 
/

इस प्रकार एक विनिमेय लौटने स्ट्रिंग:

SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ; 

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

सावधानी का एक नोट किया जाना चाहिए कि कुछ ओरेकल प्लेटफार्मों GUIDs +०१२३६५०३२९५० के समान है लेकिन अभी भी अद्वितीय मान Steven Feuerstein द्वारा।

2

रॉ (16) स्पष्ट रूप से अद्वितीय पहचानकर्ता एमएस एसक्यूएल प्रकार के लिए पसंदीदा समकक्ष है।

संबंधित मुद्दे