मैं एक पल के लिए शब्द चयन के बारे में स्पष्ट होने जा रहा हूँ:
- भले ही यह एक महत्वपूर्ण प्रदर्शन कारक था, जो इसे अर्थात् नहीं बनाता है NULL के बजाय मान का उपयोग करने के लिए सही। SQL में, NULL की एक अर्थपूर्ण भूमिका होती है, जो लापता या अनुपयोगी मान को दर्शाने के लिए होती है। किसी दिए गए RDBMS कार्यान्वयन में NULL की प्रदर्शन विशेषताएँ इससे स्वतंत्र हैं। प्रदर्शन ब्रांड से ब्रांड या संस्करण से संस्करण में भिन्न हो सकता है, लेकिन भाषा में NULL का उद्देश्य सुसंगत है।
किसी भी मामले में, मैंने किसी भी सबूत के बारे में नहीं सुना है कि NULL खराब प्रदर्शन करता है। मुझे प्रदर्शन माप के किसी भी संदर्भ में दिलचस्पी होगी जो दिखाता है कि शून्य कॉलम गैर-शून्य कॉलम से भी बदतर प्रदर्शन करते हैं।
मैं यह नहीं कह रहा हूं कि मैं गलत नहीं हूं या कुछ मामलों में यह सच नहीं हो सकता - बस यह कि बेकार के अनुमान लगाना सार्थक नहीं है। विज्ञान अनुमान से नहीं बना है; दोहराने योग्य माप के साथ सबूत दिखाना होगा।
मेट्रिक्स आपको कितना . द्वारा भी बताते हैं प्रदर्शन अलग है, इसलिए आप इस बारे में निर्णय ले सकते हैं कि यह चिंता करने लायक बात है या नहीं। यानी, प्रभाव मापने योग्य और गैर-शून्य हो सकता है, लेकिन फिर भी अधिक प्रदर्शन कारकों की तुलना में महत्वहीन हो सकता है, जैसे कि तालिकाओं को ठीक से अनुक्रमणित करना या आपके डेटाबेस कैश को आकार देना।
MySQL में, NULL की खोज एक अनुक्रमणिका से लाभान्वित हो सकती है:
mysql> CREATE TABLE foo (
i INT NOT NULL,
j INT DEFAULT NULL,
PRIMARY KEY (i),
UNIQUE KEY j_index (j)
);
mysql> INSERT INTO foo (i, j) VALUES
(1, 1), (2, 2), (3, NULL), (4, NULL), (5, 5);
mysql> EXPLAIN SELECT * FROM foo WHERE i = 3;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | foo | const | PRIMARY | PRIMARY | 4 | const | 1 | |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
mysql> EXPLAIN SELECT * FROM foo WHERE j IS NULL;
+----+-------------+-------+------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | foo | ref | j_index | j_index | 5 | const | 2 | Using where |
+----+-------------+-------+------+---------------+---------+---------+-------+------+-------------+
ध्यान दें कि यह अभी भी प्रदर्शन का माप नहीं है। मैंने केवल यह दिखाया है कि आप NULL की खोज करते समय एक अनुक्रमणिका का उपयोग कर सकते हैं। मैं जोर देने जा रहा हूं (जाहिर है कि बिना मापे, लेकिन हे यह सिर्फ स्टैक ओवरफ्लो है) कि एक इंडेक्स का लाभ किसी भी संभावित दंड को खत्म कर देता है जब NULL बनाम एक रिक्त स्ट्रिंग की खोज की जाती है।
शून्य या रिक्त या NULL के स्थान पर किसी अन्य मान को चुनना सही डिज़ाइन निर्णय नहीं है। आपको उन मानों को कॉलम में महत्वपूर्ण के रूप में उपयोग करने की आवश्यकता हो सकती है। यही कारण है कि NULL मौजूद है, एक मान के रूप में जो किसी भी डेटा प्रकार के मानों के डोमेन के बाहर परिभाषा के अनुसार है, इसलिए आप पूर्णांक या स्ट्रिंग्स के मानों की पूरी श्रृंखला का उपयोग कर सकते हैं या जो कुछ भी और अभी भी "उपरोक्त मूल्यों में से कोई भी नहीं" को इंगित करने के लिए कुछ है। "