कोई अंतर नहीं है।
सभी प्रमुख इंजन (अर्थात MySQL
, SQL Server
, Oracle
और PostgreSQL
) इन विधेय को पार्सिंग चरण में मर्ज कर देगा, उनसे समान योजनाएँ बनाकर।
इन शर्तों को संभालना अधिक जटिल है कि केवल एक या किसी अन्य क्रम में ऑपरेटरों को लागू करना।
उदाहरण के लिए, Oracle
. में , एक IS NOT NULL
(या NOT IS NULL
) शर्त का अर्थ है एक सूचकांक का उपयोग करने की संभावना, इसलिए इस तरह की एक क्वेरी:
SELECT column
FROM mytable
WHERE column IS NOT NULL
संभवतः एक index fast full scan
के साथ क्रियान्वित किया जाएगा , रनटाइम में बिना किसी अतिरिक्त जांच के (NULL
. के बाद से) मान इसे इंडेक्स में नहीं बनाएंगे, इसलिए उन्हें जांचने का कोई फायदा नहीं है)।
यहां तक कि अगर प्रत्येक रिकॉर्ड की जांच करने की आवश्यकता होगी, तो चेक के क्रम को ऑप्टिमाइज़र द्वारा परिभाषित किया जाएगा (और उस क्रम से नहीं जिसमें विधेय और ऑपरेटर WHERE
में दिखाई देते हैं। खंड)।
उदाहरण के लिए, यहां Oracle
. के लिए एक योजना है क्वेरी:
SQL> EXPLAIN PLAN FOR
2
2 SELECT *
3 FROM t_test
4 WHERE NOT column IS NULL
5 /
Explained
SQL> SELECT *
2 FROM TABLE(DBMS_XPLAN.display())
3 /
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 958699830
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 30 | 1260 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T_TEST | 30 | 1260 | 3 (0)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("COLUMN" IS NOT NULL)
जैसा कि आप देख सकते हैं, filter
आंतरिक रूप से एक IS NOT NULL
. में अनुवाद किया गया था (जो Oracle
अधिकांश टिप्पणीकारों के साथ ऐसा लगता है कि यह एक अधिक उपयुक्त रूप है)
अपडेट करें:
जैसा कि जोनाथन लेफ़लर ने बताया, टुपल्स (एकल कॉलम के विपरीत) का मूल्यांकन करते समय ये अंतर है।
मिश्रित NULL
. से मिलकर बना एक टपल और गैर-NULL
मान न तो NULL
है न ही एक NOT NULL
।
PostgreSQL
में (जो टुपल्स के खिलाफ इस विधेय का समर्थन करता है), ये दोनों भाव:
SELECT (1, NULL) IS NULL
SELECT (1, NULL) IS NOT NULL
असत्य का मूल्यांकन करें।