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

प्रकार रूपांतरण के कारण अनुक्रमणिका का उपयोग नहीं किया गया?

एक निहित रूपांतरण किसी अनुक्रमणिका को अनुकूलक द्वारा उपयोग किए जाने से रोक सकता है। विचार करें:

SQL> CREATE TABLE a (ID VARCHAR2(10) PRIMARY KEY);
 
Table created
 
SQL> insert into a select rownum from dual connect by rownum <= 1e6;
 
1000000 rows inserted

यह एक साधारण तालिका है लेकिन डेटाटाइप 'सही' नहीं है, यानी यदि आप इसे इस तरह से पूछते हैं तो यह पूर्ण स्कैन होगा:

SQL> select * from a where id = 100;
 
ID
----------
100

यह क्वेरी वास्तव में इसके बराबर है:

select * from a where to_number(id) = 100;

यह अनुक्रमणिका का उपयोग नहीं कर सकता क्योंकि हमने id . को अनुक्रमित किया है और नहीं to_number(id) . यदि हम अनुक्रमणिका का उपयोग करना चाहते हैं तो हमें स्पष्ट . होना होगा :

select * from a where id = '100';

पाकर की टिप्पणी के जवाब में: निहित रूपांतरणों से संबंधित बहुत सारे नियम हैं। शुरू करने के लिए एक अच्छी जगह है दस्तावेज़ीकरण . अन्य बातों के अलावा, हम सीखते हैं कि:

इसका मतलब है कि जब एक "WHERE column=variable" . के दौरान निहित रूपांतरण होता है क्लॉज, ओरेकल कॉलम के डेटाटाइप को कन्वर्ट करेगा न कि वेरिएबल के, इसलिए इंडेक्स को इस्तेमाल होने से रोकता है। यही कारण है कि आपको हमेशा सही प्रकार के डेटाटाइप का उपयोग करना चाहिए या चर को स्पष्ट रूप से परिवर्तित करना चाहिए।

Oracle दस्तावेज़ से:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. R12.2 . में मैनेज सर्वर कैसे जोड़ें

  2. Oracle:अशक्त और अशक्त पंक्तियों की गणना कैसे करें

  3. ओरेकल एसक्यूएल | ORDER BY . में डेटा संशोधित करना

  4. जावा से ओरेकल प्रक्रिया में सूची कैसे पास करें?

  5. ओरेकल में दो तिथियों के बीच न्यूनतम अंतर का चयन करना जब तिथियों को यूनिक्स टाइमस्टैम्प के रूप में दर्शाया जाता है