Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

इज़ नॉट नल और नॉट इज़ नल में क्या अंतर है?

कोई अंतर नहीं है।

सभी प्रमुख इंजन (अर्थात 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

असत्य का मूल्यांकन करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्यों SQLSTATE [HY000]:सामान्य त्रुटि?

  2. Class.forName(com.mysql.jdbc.Driver).newInstance()

  3. MySQL:फुल आउटर जॉइन - मैं एक कॉलम को कैसे मर्ज कर सकता हूं?

  4. निर्दिष्ट कुंजी बहुत लंबी थी; अधिकतम कुंजी लंबाई 1000 बाइट्स है

  5. डीबीसीपी का उपयोग कर टॉमकैट कॉन्फ़िगरेशन