मेरा मानना है कि count(1)
Oracle के पुराने संस्करणों में तेज़ हुआ करता था। लेकिन अब तक, मुझे पूरा यकीन है कि ऑप्टिमाइज़र यह जानने के लिए पर्याप्त स्मार्ट है कि count(*)
और count(1)
इसका मतलब है कि आप पंक्तियों की संख्या चाहते हैं और एक उपयुक्त निष्पादन योजना बनाते हैं।
ये रहा:
create table t as select * from all_objects;
Table T created.
create index tindx on t( object_name );
Index TINDX created.
select count(*) from t;
COUNT(*)
----------
21534
select * from table(dbms_xplan.display_cursor( NULL, NULL, 'allstats last' ));
Plan hash value: 2940353011
--------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |
--------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 100 | 93 |
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.01 | 100 | 93 |
| 2 | INDEX FAST FULL SCAN| TINDX | 1 | 18459 | 21534 |00:00:00.01 | 100 | 93 |
--------------------------------------------------------------------------------------------------
select count(1) from t;
COUNT(1)
----------
21534
Plan hash value: 2940353011
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 100 |
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.01 | 100 |
| 2 | INDEX FAST FULL SCAN| TINDX | 1 | 18459 | 21534 |00:00:00.01 | 100 |
-----------------------------------------------------------------------------------------
तो यह न केवल यह जानने के लिए पर्याप्त स्मार्ट है कि यह इस क्वेरी को अनुकूलित करने के लिए इंडेक्स का उपयोग कर सकता है, बल्कि यह विभिन्न संस्करणों के लिए एक ही निष्पादन योजना का उपयोग करता है (योजना का मूल्य समान है)।