设为首页 加入收藏

TOP

Oracle里count(1)、count(*)和count(主键)哪个更快(一)
2016-12-28 08:15:46 】 浏览:327
Tags:Oracle count 主键 哪个 更快

1、创建测试表并设计测试场景:


--创建测试表
sys@ORCL>create table journal_entries
2 (id_je number(8) ,
3 date_je date not null,
4 balanced number ,
5 constraint indx_ecr_id_je primary key(id_je)
6 );

Table created.
--创建索引
sys@ORCL>create index indx_ecr_date_je_balanced on journal_entries(date_je,balanced);

Index created.

sys@ORCL>create index indx_ecr_balanced_date_je on journal_entries(balanced,date_je);

Index created.

sys@ORCL>create index indx_ecr_balanced on journal_entries(balanced);

Index created.
--插入测试数据
sys@ORCL>insert into journal_entries values(1,sysdate,11);

1 row created.

sys@ORCL>insert into journal_entries values(2,sysdate,21);

1 row created.

sys@ORCL>insert into journal_entries values(3,sysdate,31);

1 row created.

sys@ORCL>insert into journal_entries values(4,sysdate,41);

1 row created.

sys@ORCL>insert into journal_entries values(5,sysdate,51);

1 row created.

sys@ORCL>insert into journal_entries values(6,sysdate,61);

1 row created.

sys@ORCL>insert into journal_entries values(7,sysdate,71);

1 row created.

sys@ORCL>insert into journal_entries values(8,sysdate,81);

1 row created.

sys@ORCL>insert into journal_entries values(9,sysdate,91);

1 row created.

sys@ORCL>commit;

Commit complete.
--收集统计信息
sys@ORCL>exec dbms_stats.gather_table_stats(ownname=>USER,tabname=>'JOURNAL_ENTRIES',cascade=>true);

PL/SQL procedure successfully completed.


设计四个场景进行对比:


Sel1 : Select count(*) from journal_entries;
Sel2 : Select count(1) from journal_entries;
Sel3 : Select count(id_je) from journal_entries;



Sel4 : Select count(balanced) from journal_entries;


1、场景1和场景2等价


For CBO, Sel1 and Sel2 are strictly equivalent


sys@ORCL>alter session set statistics_level=all;

Session altered.

sys@ORCL>select count(*) from journal_entries;

COUNT(*)
----------
9

sys@ORCL>select * from table(dbms_xplan.display_cursor(null,null,'runstats_last'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID 5ja3ukp4wd73p, child number 0
-------------------------------------
select count(*) from journal_entries

Plan hash value: 42135099

---------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 1 |
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.01 | 1 |
| 2 | INDEX FULL SCAN| INDX_ECR_ID_JE | 1 | 9 | 9 |00:00:00.01 | 1 |
---------------------------------------------------------------------------------------------

14 rows selected.

sys@ORCL>select count(1) from journal_entries;

COUNT(1)
----------
9

sys@ORCL>select * from table(dbms_xplan.display_cursor(null,null,'runstats_last'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID gbxjjuqj9j7ww, child number 0
-------------------------------------
select

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle物化视图增量刷新测试 下一篇Oracle的密码文件及远程SYSDBA登录

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目