2008-08-20 11 views
8

हम कुछ GUID को एक एमएस एसक्यूएल डेटाबेस में संग्रहीत कर रहे हैं। कुछ विरासत कोड है जो Guid.ToString() करता है और फिर उन्हें varchar(64) में भेजता है और कुछ नया कोड होता है जो उन्हें अद्वितीय पहचानकर्ता पैरामीटर का उपयोग करने में पास करता है। जब आप एमएस एसक्यूएल प्रबंधन स्टूडियो का उपयोग कर परिणामों को देखते हैं तो वे अलग दिखते हैं। पहले तीन ब्लॉक के बाइट ऑर्डर को उलट दिया गया है लेकिन आखिरी वाला वही रहता है। क्यूं कर?क्यों Guid.ToString() बाइट ऑर्डर को उलट देता है?

उत्तर

8

एसक्यूएल सर्वर में अद्वितीय पहचानकर्ता फ़ील्ड को अनुक्रमित किया जा सकता है, और इसलिए 'पिछड़ा' भी है।

मार्गदर्शिका मशीन विशिष्ट जानकारी और 'ईवेंट-टाइम' दोनों जानकारी से उत्पन्न की जा सकती हैं।

डिफ़ॉल्ट नेट में Guid यादृच्छिक है, लेकिन आप एक निर्वासन कॉल के साथ इसे से अनुक्रमिक GUIDs प्राप्त कर सकते हैं:

[DllImport("rpcrt4.dll", SetLastError = true)] 
static extern int UuidCreateSequential(out Guid guid); 

यह आपको लगता है कि अनुक्रमिक हैं अपने मैक पता (MSDN docs) के आधार पर GUIDs मिल जाएगा।

यदि आप .ToString() इन अनुक्रमिक guids तो आप देखेंगे कि स्ट्रिंग का पहला भाग भिन्न होता है, जबकि बाकी स्थिर रहता है।

यह गइड्स के बीच समानता जांच करता है (क्योंकि मतभेद शुरुआत में होंगे) और छंटनी वाले लोगों के लिए भिन्नता में सुधार करता है।

कॉलम खोजने के लिए SqlServer एक टेलीफोन निर्देशिका या शब्दकोश के समान तरीके से इंडेक्स बनाता है। "ओवर *" से शुरू होने वाले शब्दों की खोज करना बहुत तेज़ है, यह "* प्रवाह" में समाप्त होने वाले लोगों को ढूंढना होगा।

इसका मतलब है कि एसक्यूएल सर्वर के लिए किसी अनुक्रमिक मार्गदर्शिका को पहले दोहराने वाले मूल्य के साथ संग्रहीत करने की आवश्यकता है, इसलिए यह उन्हें वापस सामने रखता है।

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