Oracle11g count使用函数时在性能与返回结果的差别

实验对象:

count(0)
count(*)
count(字段名)

实验结果:

1、无主键的情况下,实验结果:三种count消耗的性能相同

2、有主键的情况下,实验结果:三种count消耗的性能得到提示,但效果仍然相同;

3、返回结果的差别,实验结果:count(0)与count(*)结果相同,count(字段名)受实际列中值影响,为null时不计数:


以下为实验步骤:


1、性能上差别

1.1、无主键的情况下:

SQL> select count(0) from scott.test4;


Execution Plan
----------------------------------------------------------
Plan hash value: 2292881717

--------------------------------------------------------------------
| Id  | Operation       | Name  | Rows  | Cost (%CPU)| Time       |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |     1 |   507   (1)| 00:00:07 |
|   1 |  SORT AGGREGATE    |       |     1 |        |       |
|   2 |   TABLE ACCESS FULL| TEST4 | 35298 |   507   (1)| 00:00:07 |
--------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      9  recursive calls
      0  db block gets
       1904  consistent gets
       2155  physical reads
      0  redo size
    528  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select count(*) from scott.test4;


Execution Plan
----------------------------------------------------------
Plan hash value: 2292881717

--------------------------------------------------------------------
| Id  | Operation       | Name  | Rows  | Cost (%CPU)| Time       |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |     1 |   507   (1)| 00:00:07 |
|   1 |  SORT AGGREGATE    |       |     1 |        |       |
|   2 |   TABLE ACCESS FULL| TEST4 | 35298 |   507   (1)| 00:00:07 |
--------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      4  recursive calls
      0  db block gets
       1902  consistent gets
       1826  physical reads
      0  redo size
    528  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select count(row_id) from scott.test4;


Execution Plan
----------------------------------------------------------
Plan hash value: 2292881717

--------------------------------------------------------------------
| Id  | Operation       | Name  | Rows  | Cost (%CPU)| Time       |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |     1 |   507   (1)| 00:00:07 |
|   1 |  SORT AGGREGATE    |       |     1 |        |       |
|   2 |   TABLE ACCESS FULL| TEST4 | 35298 |   507   (1)| 00:00:07 |
--------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      4  recursive calls
      0  db block gets
       1902  consistent gets
       1826  physical reads
      0  redo size
    533  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed



1.2、有主键的情况下:

建立主键

SQL> alter table scott.TEST4
  add constraint PK_ROW_ID primary key (ROW_ID)
  using index 
  tablespace test
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );  2    3    4    5    6    7    8    9   10   11   12   13   14  

Table altered.

SQL> select count(0) from scott.test4;


Execution Plan
----------------------------------------------------------
Plan hash value: 3979401870

---------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Cost (%CPU)| Time      |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       |    1 |    31   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE       |       |    1 |           |      |
|   2 |   INDEX FAST FULL SCAN| PK_ROW_ID | 35298 |    31   (0)| 00:00:01 |
---------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
    357  recursive calls
      0  db block gets
    409  consistent gets
     99  physical reads
      0  redo size
    528  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      6  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL>  select count(*) from scott.test4;


Execution Plan
----------------------------------------------------------
Plan hash value: 3979401870

---------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Cost (%CPU)| Time      |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       |    1 |    31   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE       |       |    1 |           |      |
|   2 |   INDEX FAST FULL SCAN| PK_ROW_ID | 35298 |    31   (0)| 00:00:01 |
---------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      4  recursive calls
      0  db block gets
    180  consistent gets
      0  physical reads
      0  redo size
    528  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select count(row_id) from scott.test4;


Execution Plan
----------------------------------------------------------
Plan hash value: 3979401870

---------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Cost (%CPU)| Time      |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       |    1 |    31   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE       |       |    1 |           |      |
|   2 |   INDEX FAST FULL SCAN| PK_ROW_ID | 35298 |    31   (0)| 00:00:01 |
---------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      4  recursive calls
      0  db block gets
    180  consistent gets
      0  physical reads
      0  redo size
    533  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed




2、返回结果的差别:

SQL> create table scott.test5
  2  (
  3  row_id varchar2(10),
  4  row_num varchar2(10)
  5  ) tablespace test;

Table created.

SQL> insert into scott.test5 values(null,null);

1 row created.

SQL> insert into scott.test5 values(null,null);

1 row created.

SQL> commit;

Commit complete.

SQL> select count(0) from scott.test5;

  COUNT(0)
----------
     2


Execution Plan
----------------------------------------------------------
Plan hash value: 529722805

--------------------------------------------------------------------
| Id  | Operation       | Name  | Rows  | Cost (%CPU)| Time       |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |     1 |     3   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE    |       |     1 |        |       |
|   2 |   TABLE ACCESS FULL| TEST5 |     2 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      5  recursive calls
      0  db block gets
     15  consistent gets
      0  physical reads
      0  redo size
    526  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select count(row_id) from scott.test5;

COUNT(ROW_ID)
-------------
        0


Execution Plan
----------------------------------------------------------
Plan hash value: 529722805

----------------------------------------------------------------------------
| Id  | Operation       | Name  | Rows  | Bytes | Cost (%CPU)| Time       |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |     1 |     7 |     3   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE    |       |     1 |     7 |        |       |
|   2 |   TABLE ACCESS FULL| TEST5 |     2 |    14 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      8  recursive calls
      0  db block gets
     17  consistent gets
      0  physical reads
      0  redo size
    530  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select count(*) from scott.test5;

  COUNT(*)
----------
     2


Execution Plan
----------------------------------------------------------
Plan hash value: 529722805

--------------------------------------------------------------------
| Id  | Operation       | Name  | Rows  | Cost (%CPU)| Time       |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |     1 |     3   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE    |       |     1 |        |       |
|   2 |   TABLE ACCESS FULL| TEST5 |     2 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      4  recursive calls
      0  db block gets
     15  consistent gets
      0  physical reads
      0  redo size
    526  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select count(row_num) from scott.test5;

COUNT(ROW_NUM)
--------------
         0


Execution Plan
----------------------------------------------------------
Plan hash value: 529722805

----------------------------------------------------------------------------
| Id  | Operation       | Name  | Rows  | Bytes | Cost (%CPU)| Time       |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |     1 |     7 |     3   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE    |       |     1 |     7 |        |       |
|   2 |   TABLE ACCESS FULL| TEST5 |     2 |    14 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      5  recursive calls
      0  db block gets
     17  consistent gets
      0  physical reads
      0  redo size
    531  bytes sent via SQL*Net to client
    523  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值