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

SQL 'कहाँ' खंड में शर्तों का निष्पादन क्रम

क्या आप निश्चित हैं निष्पादन योजना देखने के लिए आपके पास "अधिकार नहीं है"? AUTOTRACE का उपयोग करने के बारे में क्या?

SQL> set autotrace on
SQL> select * from emp
  2  join dept on dept.deptno = emp.deptno
  3  where emp.ename like 'K%'
  4  and dept.loc like 'l%'
  5  /

no rows selected


Execution Plan
----------------------------------------------------------

----------------------------------------------------------------------------------
| Id  | Operation                    | Name         | Rows  | Bytes | Cost (%CPU)|
----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |              |     1 |    62 |     4   (0)|
|   1 |  NESTED LOOPS                |              |     1 |    62 |     4   (0)|
|*  2 |   TABLE ACCESS FULL          | EMP          |     1 |    42 |     3   (0)|
|*  3 |   TABLE ACCESS BY INDEX ROWID| DEPT         |     1 |    20 |     1   (0)|
|*  4 |    INDEX UNIQUE SCAN         | SYS_C0042912 |     1 |       |     0   (0)|
----------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("EMP"."ENAME" LIKE 'K%' AND "EMP"."DEPTNO" IS NOT NULL)
   3 - filter("DEPT"."LOC" LIKE 'l%')
   4 - access("DEPT"."DEPTNO"="EMP"."DEPTNO")

जैसा कि आप देख सकते हैं, यह इस बारे में काफी विवरण देता है कि क्वेरी को कैसे निष्पादित किया जाएगा। यह मुझे बताता है कि:

  • शर्त "emp.ename like 'K%'" सबसे पहले EMP के पूर्ण स्कैन पर लागू होगी
  • तब मिलान करने वाले DEPT रिकॉर्ड्स को dept.deptno (NESTED LOOPS विधि के माध्यम से) पर इंडेक्स के माध्यम से चुना जाएगा
  • आखिरकार फ़िल्टर "dept.loc जैसे 'l%' लागू किया जाएगा।

आवेदन के इस आदेश का WHERE क्लॉज में विधेय के आदेश देने के तरीके से कोई लेना-देना नहीं है, जैसा कि हम इस पुन:आदेशित क्वेरी के साथ दिखा सकते हैं:

SQL> select * from emp
  2  join dept on dept.deptno = emp.deptno
  3  where dept.loc like 'l%'
  4  and emp.ename like 'K%';

no rows selected


Execution Plan
----------------------------------------------------------

----------------------------------------------------------------------------------
| Id  | Operation                    | Name         | Rows  | Bytes | Cost (%CPU)|
----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |              |     1 |    62 |     4   (0)|
|   1 |  NESTED LOOPS                |              |     1 |    62 |     4   (0)|
|*  2 |   TABLE ACCESS FULL          | EMP          |     1 |    42 |     3   (0)|
|*  3 |   TABLE ACCESS BY INDEX ROWID| DEPT         |     1 |    20 |     1   (0)|
|*  4 |    INDEX UNIQUE SCAN         | SYS_C0042912 |     1 |       |     0   (0)|
----------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("EMP"."ENAME" LIKE 'K%' AND "EMP"."DEPTNO" IS NOT NULL)
   3 - filter("DEPT"."LOC" LIKE 'l%')
   4 - access("DEPT"."DEPTNO"="EMP"."DEPTNO")


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL डेवलपर प्रारंभ नहीं होगा

  2. सही उपयोगकर्ता नाम और पासवर्ड देकर, ORA-01017 प्राप्त करें:अमान्य उपयोगकर्ता नाम/पासवर्ड; लॉगऑन अस्वीकृत

  3. Oracle पर SYSDATE के लिए UTC मान कैसे प्राप्त करें?

  4. ORA-02014 को कैसे हल करें:DISTINCT, GROUP BY के साथ दृश्य से अद्यतन के लिए चयन नहीं कर सकता

  5. Oracle में REGEXP_COUNT () फ़ंक्शन