2009-12-23 12 views
5

मैं Firebird 2.1 में एक डेटाबेस तालिका की प्राथमिक कुंजी के रूप में एक VARCHAR (255) क्षेत्र सेट करना होगा।फायरबर्ड में प्राथमिक कुंजी का अधिकतम आकार क्या है?

मैं कह रही है कि क्षेत्र आकार बहुत बड़ा है त्रुटि संदेश मिलता है। मैं अपने चरित्र सेट के रूप में UTF8 और 4096.

के डिफ़ॉल्ट पृष्ठ आकार Firebird में यह करने के लिए यह संभव है का उपयोग कर रहा हूँ? मुझे यह सुनिश्चित करने की ज़रूरत है कि यह कॉलम अद्वितीय है।

+0

जब आप gstat बनाने: अपनी प्राथमिक कुंजी पर अपने सूचकांक की गहराई क्या है? –

+0

मुझे यकीन नहीं है कि "इंडेक्स की गहराई" से आपका क्या मतलब है। मैंने पहले gstat का उपयोग नहीं किया है। – dthrasher

+0

शायद [यह धागा] (http://tech.groups.yahoo.com/group/firebird-support/message/98562) आपको जीएसटीएटी रिटर्न की एक लिटल समझने में मदद कर सकता है। आपको फायरबर्ड में इंडेक्स इंडेक्स (: – EMBarbosa

उत्तर

8

के रूप में व्याख्या की अधिकतम कुंजी आकार पृष्ठ आकार का 1/4 है उपकरणों में बहुत अच्छी तरह से देख सकते हैं, लेकिन Firebird संदर्भ अद्यतन (here) से, बाइट में अधिकतम इंडेक्स करने योग्य स्ट्रिंग की लंबाई अधिकतम कुंजी लंबाई से 9 कम है। और फायरबर्ड में यूटीएफ 8 को आंतरिक रूप से 4 Bytes/char के रूप में संग्रहीत किया जाता है।

इस प्रकार 4096 पृष्ठ आकार के डेटाबेस में यूटीएफ 8 की अधिकतम लंबाई 253 वर्ण (4096/4-9 = 1024-9 = 1015 253 * 4 = 1012 तक सीमित है)। इसलिए, यदि आप एक बड़ी स्ट्रिंग चाहते हैं, तो आपको एक बड़े पेज के आकार का डेटाबेस चाहिए (भले ही आप फायरबर्ड 2.5.x का उपयोग कर रहे हों)।

+0

आह, यह समझाता है कि यह समझने में असमर्थ है कि आपको [आईबीफ़ोनिक्स साइट] (http://www.ibphoenix.com/resources/documents/design) में एन हैरिसन पेपर पढ़ना चाहिए। मैं कुछ बाइट क्यों खो रहा था! – dthrasher

1

FirebirdFAQ के अनुसार Firebird 2.x में अधिकतम कुंजी आकार पृष्ठ आकार का एक चौथाई है। यदि आपका पृष्ठ आकार 4096 बाइट्स है तो आपका अधिकतम कुंजी आकार 1024 बाइट है।
UTF8 चार प्रति एक पूर्ण 32-बिट आरक्षित भले ही यह कम जगह का उपयोग कर सकते varchars। इस प्रकार यूटीएफ 8 में एक वर्कर (255) 1020 बाइट है। मुझे नहीं पता कि यह सीमा क्यों मार रहा है, लेकिन फिर भी मैं पृष्ठ का आकार बढ़ाऊंगा या वर्कर (254) कोशिश करूंगा।

0

सिर्फ बनाने gstat घ: \ पथ \ database.fdb

आप अपनी अनुक्रमणिका के लिए इस तरह someting मिल जाएगा:

> Index CLIENT_IDX (2) 
>   Depth: 3, leaf buckets: 545, nodes: 138523 
>   Average data length: 10.12, total dup: 13873, max dup: 645 
>   Fill distribution: 
>    0 - 19% = 0 
>    20 - 39% = 0 
>    40 - 59% = 0 
>    60 - 79% = 0 
>    80 - 99% = 545 

अगर गहराई अधिक से अधिक 3 है: आप पेज को बढ़ाने के लिए करना होगा आकार। यह Douglas Tosi जैसा ही है।

आप IBExpert full edition या में IBAnalist