以hr测试用户下的employees表为例,分别输出查询结果以及执行计划,便于大家进行对比分析。
查询结果
SQL> select
count(*) from employees;
COUNT(*)
----------
107
SQL> select
count(1) from employees;
COUNT(1)
----------
107
SQL> select count
(employee_id) from employees;--主键列
COUNT(EMPLOYEE_ID)
------------------
107
SQL> select count
(commission_pct) from employees;--非主键列(包含空值)
COUNT(COMMISSION_PCT)
---------------------
35
SQL> select
count(rowid) from employees;
COUNT(ROWID)
------------
107
执行计划
SQL> set autot trace exp
SQL> select
count(*) from employees;
Execution Plan
----------------------------------------------------------
Plan hash value: 3580537945
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 |
INDEX FULL SCAN| EMP_EMAIL_UK | 107 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------
SQL> select
count(1) from employees;
Execution Plan
----------------------------------------------------------
Plan hash value: 3580537945
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 |
INDEX FULL SCAN| EMP_EMAIL_UK | 107 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------
SQL> select
count(employee_id) from employees;
Execution Plan
----------------------------------------------------------
Plan hash value: 3580537945
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 |
INDEX FULL SCAN| EMP_EMAIL_UK | 107 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------
SQL> select
count(commission_pct) from employees;
Execution Plan
----------------------------------------------------------
Plan hash value: 1756381138
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 2 | | |
| 2 |
TABLE ACCESS FULL| EMPLOYEES | 107 | 214 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------------
SQL> select
count(rowid) from employees;
Execution Plan
----------------------------------------------------------
Plan hash value: 3580537945
---------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 12 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 12 | | |
| 2 |
INDEX FULL SCAN| EMP_EMAIL_UK | 107 | 1284 | 1 (0)| 00:00:01 |
---------------------------------------------------------------------------------