2010-07-19 11 views
7

आपके लिए डेटाबेस डिज़ाइन/प्रदर्शन गुरु के लिए।प्रदर्शन पर एसक्यूएल सर्वर int बनाम nvarchar तुलना?

मैं एक टेबल तैयार कर रहा हूं, मेरे पास कॉलम के लिए या तो int या nvarchar (128) का उपयोग करने का विकल्प है, मान लें कि अंतरिक्ष कोई समस्या नहीं है। मेरा प्रश्न है जो प्रदर्शन

जब मैं पूर्णांक स्तंभ के साथ खोज

where ID = 12324

या जब मैं nvarchar स्तंभ के साथ खोज (कुंजी पूरे मूल्य है, इसलिए मैं ऑपरेटर की तरह उपयोग नहीं कर रहा हूँ) दे देंगे

where Key = 'my str'

मैं छोटे डेटासेट यह कोई बात नहीं के लिए यकीन है, लेकिन मान लें इस डेटा पंक्तियों के लाखों लोगों में हो जाएगा करते हैं।

उत्तर

17

INT तेजी से होगा - क्यों यहाँ है:

  • एसक्यूएल सर्वर यदि आप इसे पर INT कुंजी के साथ एक सूचकांक पृष्ठ है 8K
  • के पन्नों में अपने डेटा और सूचकांक का आयोजन करता है, तो आप लगभग 2'000 मिल INT प्रविष्टियां
  • अगर आप NVARCHAR (128) है और आप औसत 20 वर्ण पर उपयोग करते हैं, उस प्रविष्टि प्रति 40 बाइट्स, या सूचकांक प्रविष्टियों की एक ही राशि के लिए प्रति पृष्ठ

तो मोटे तौर पर 200 प्रविष्टियों, NVARCHAR (है 128) सीए से दस गुना इंडेक्स पेजों का उपयोग करेंगे।

उन इंडेक्स पृष्ठों को लोड और खोजना महत्वपूर्ण रूप से अधिक I/O संचालन करेगा।

तो चीजों को कम करने के लिए: यदि आप कर सकते हैं, तो हमेशा आईएनटी का उपयोग करें।

5

इस के साथ प्रदर्शन के साथ मुख्य मुद्दा फ़ील्ड का आकार है - int 4 बाइट्स है, जबकि nvarchar(128) 254 बाइट्स होगा।

इन सभी को SQL सर्वर द्वारा प्रबंधित करने की आवश्यकता है, इसलिए int का प्रबंधन nvarchar(128) से बहुत तेज होगा।

+1

+1 अच्छा बिंदु। साथ ही, एक सीपीयू को स्ट्रिंग के बजाय int को संसाधित करने के लिए थोड़ा कम काम होता है। लाखों पंक्तियों के साथ इसका परिणाम गैर-लचीला अंतर हो सकता है। मुझे इस पर कुछ वास्तविक प्रदर्शन परीक्षण देखने में दिलचस्पी होगी। –

8

अंतरिक्ष हमेशा डेटाबेस में एक समस्या है। व्यापक कुंजी का मतलब प्रति पृष्ठ कम प्रविष्टियां हैं, कुल और समेकित मूल्यों के लिए स्कैन किए गए अधिक पृष्ठ, अधिक आईओ, कम प्रदर्शन का मतलब है। क्लस्टर इंडेक्स के लिए, यह समस्या प्रत्येक गैर-क्लस्टर इंडेक्स द्वारा गुणा हो जाती है, क्योंकि उन्हें अपने पत्ते में लुकअप कुंजी (क्लस्टर कुंजी) को पुन: पेश करना होता है। तो nvarchar(128) टाइप की एक कुंजी लगभग हमेशा एक आईएनटी से भी बदतर हो जाएगी।

दूसरी ओर, उचित नहीं होने पर एक आईएनटी कुंजी का उपयोग न करें। अपने प्रश्न पर विचार करने के लिए हमेशा उचित कुंजी, का उपयोग करें। यदि आप हमेशा एक nvarchar (128) कॉलम मान से पूछताछ करने जा रहे हैं, तो संभवतः एक अच्छा क्लस्टर कुंजी उम्मीदवार है। यदि आप nvarchar (128) कुंजी द्वारा कुल पर जा रहे हैं, तो संभावित एक अच्छा क्लस्टर कुंजी उम्मीदवार है।

+2

+1: प्राकृतिक> कृत्रिम कुंजी, लेकिन बहुत कम प्राकृतिक कुंजी आईएमई हैं। –

0

मैं प्रदर्शन के लिए int का उपयोग करता हूं (यदि यह विशेष रूप से शामिल हो रहा है) और डेटा अखंडता के लिए संभावित प्राकृतिक कुंजी पर एक अद्वितीय अनुक्रमणिका डालें।

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