1 表行计数器 说明

默认情况下,DM 达梦数据库count() 是秒回结果的,不受表中实际行数的影响,执行select count() 都能立即返回正确的结果。因为达梦数据库的count(*)操作不需要执行全表扫描,直接读取表行计数器的结果。

这个表行计数器实际上是表的一个存储属性,在创建表时可以指定是否启用表行计数器。默认为启动,可以配置为如下2个值:

WITH COUNTER:默认值,在表上维护当前表内的行数;

WITHOUT COUNTER:表上只维护一个非实时的大概的行数;https://www.cndba.cn/dave/article/3829

如果表启用了WITH COUNTER 属性, SELECT COUNT(*)时服务器直接取行数返回即可,可以快速响应;

如果表是 WITHOUT COUNTER 属性,服务器需要先扫描 B 树获取行数返回后才能响应。

https://www.cndba.cn/dave/article/3829https://www.cndba.cn/dave/article/3829

2 测试

2.1 创建默认启用counter的表cndba

[dave@www.cndba.cn ~]$ disql SYSDBA/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态

登录使用时间: 12.679(毫秒)

disql V8

SQL> create table cndba(id int,website varchar(50));

操作已执行

已用时间: 9.588(毫秒). 执行号:3281.

SQL> insert into cndba values(1,'https://www.cndba.cn/dave');

影响行数 1

已用时间: 1.908(毫秒). 执行号:3282.

SQL> commit;

操作已执行

已用时间: 1.376(毫秒). 执行号:3283.

SQL>

查看此时的执行计划

SQL> explain select count(*) from cndba;

1 #NSET2: [0, 1, 0]

2 #PRJT2: [0, 1, 0]; exp_num(1), is_atom(FALSE)

3 #FAGR2: [0, 1, 0]; sfun_num(1),

已用时间: 29.509(毫秒). 执行号:0.

SQL>

2.2 创建没有启用counter的表cndba2

SQL> create table cndba2(id int,website varchar(50)) storage(without counter);

操作已执行

已用时间: 5.633(毫秒). 执行号:3284.

SQL> insert into cndba2 values(2,'https://www.cndba.cn/dave');

影响行数 1

已用时间: 2.107(毫秒). 执行号:3285.

SQL> commit;

操作已执行

已用时间: 1.856(毫秒). 执行号:3286.

SQL> explain select count(*) from cndba2;

1 #NSET2: [0, 1, 0]

2 #PRJT2: [0, 1, 0]; exp_num(1), is_atom(FALSE)

3 #AAGR2: [0, 1, 0]; grp_num(0), sfun_num(1) slave_empty(0)

4 #CSCN2: [0, 1, 0]; INDEX33555492(CNDBA2)

已用时间: 1.307(毫秒). 执行号:0.

SQL>

2.3 对比

2.3.1 查看表的定义语句

[dave@www.cndba.cn Code]# drz getddl table cndba SYSDBA

*****************DDL SQL******************

CREATE TABLE "SYSDBA"."CNDBA"

(

"ID" INT,

"WEBSITE" VARCHAR(50)) STORAGE(ON "MAIN", CLUSTERBTR) ;

[dave@www.cndba.cn Code]#

未启用表行计数器:

[dave@www.cndba.cn Code]# drz getddl table cndba SYSDBA

*****************DDL SQL******************

CREATE TABLE "SYSDBA"."CNDBA2"

(

"ID" INT,

"WEBSITE" VARCHAR(50)) STORAGE(ON "MAIN", CLUSTERBTR, WITHOUT COUNTER) ;

[dave@www.cndba.cn Code]#

2.3.2 执行计划的操作符

启用counter:https://www.cndba.cn/dave/article/3829

2 #PRJT2: [0, 1, 0]; exp_num(1), is_atom(FALSE)

3 #FAGR2: [0, 1, 0]; sfun_num(1),

FAGR2 表示:快速聚集,如果没有 where 条件,且取 count(*), 或者基于索引的 MAX/MIN 值,则可以快速取得集函数的值

未启用counter:

2 #PRJT2: [0, 1, 0]; exp_num(1), is_atom(FALSE)

3 #AAGR2: [0, 1, 0]; grp_num(0), sfun_num(1) slave_empty(0)

4 #CSCN2: [0, 1, 0]; INDEX33555492(CNDBA2)

AAGR2表示:简单聚集

CSCN2表示:聚集索引扫描

2.4 Counter 状态切换

将cndba 改成不启用counter:

SQL> alter table cndba without counter;

操作已执行

已用时间: 9.653(毫秒). 执行号:3291.

SQL>

[dave@www.cndba.cn Code]# drz getddl table cndba SYSDBA

*****************DDL SQL******************

CREATE TABLE "SYSDBA"."CNDBA"

(

"ID" INT,

"WEBSITE" VARCHAR(50)) STORAGE(ON "MAIN", CLUSTERBTR, WITHOUT COUNTER) ;

将cndba2 改成启用counter:https://www.cndba.cn/dave/article/3829

SQL> alter table cndba2 with counter;

操作已执行

已用时间: 5.636(毫秒). 执行号:3294.

SQL>

[dave@www.cndba.cn Code]# drz getddl table cndba2 SYSDBA

*****************DDL SQL******************

CREATE TABLE "SYSDBA"."CNDBA2"

(

"ID" INT,

"WEBSITE" VARCHAR(50)) STORAGE(ON "MAIN", CLUSTERBTR) ;

2.5 Count(*) 时间对比

2.5.1 启用counter

SQL> create table t1 as select * from sysobjects;

操作已执行

已用时间: 11.657(毫秒). 执行号:3297.

SQL> insert into t1 select * from t1;

影响行数 1399

已用时间: 28.383(毫秒). 执行号:3298.

SQL> insert into t1 select * from t1;

影响行数 2798

已用时间: 14.120(毫秒). 执行号:3299.

SQL> insert into t1 select * from t1;

影响行数 5596

已用时间: 21.753(毫秒). 执行号:3300.

SQL> commit;

操作已执行

已用时间: 1.950(毫秒). 执行号:3301.

SQL> select count(*) from t1;

行号 COUNT(*)

---------- --------------------

1 11192

已用时间: 1.902(毫秒). 执行号:3302.

2.5.2 未启用counter

SQL> create table t2 as select * from sysobjects where 1=2;

操作已执行

已用时间: 7.219(毫秒). 执行号:3303.

SQL> alter table t2 without counter;

操作已执行

已用时间: 7.715(毫秒). 执行号:3304.

SQL> insert into t2 select * from t1;

影响行数 11192

已用时间: 31.559(毫秒). 执行号:3305.

SQL> commit;

操作已执行

已用时间: 1.500(毫秒). 执行号:3306.

SQL> select count(*) from t2;

行号 COUNT(*)

---------- --------------------

1 11192

已用时间: 2.608(毫秒). 执行号:3307.

SQL>

我们这里仅仅是1w多条数据,如果是上千万级别的记录数,那么时间差距就会更明显一些。

https://www.cndba.cn/dave/article/3829

版权声明:本文为博主原创文章,未经博主允许不得转载。

oracle数据库计数器,DM 达梦数据库 表的 行计数器(COUNTER)属性相关推荐

  1. DM达梦数据库删除表时提示锁超时的解决方法

    DM 达梦数据库删除表时提示锁超时的问题 1. 问题描述 达梦数据库删除表时,删除失败,提示的报错信息是 锁超时 2. 解决方法 查询所删除表对应的SESS_ID,sql语句如下: select a. ...

  2. 浅谈DM达梦数据库体系结构概念

    浅谈DM达梦数据库体系结构概念 DM逻辑结构 DM和Oracle一样也分数据库和实例,两者的概念也基本一致. 但是不同点在于:达梦是单进程.多线程,而oracle是多进程的. DM这种对称服务器构架在 ...

  3. DM达梦数据库的使用以及数据迁移工具的使用

    1.找不到DM数据库的相关软件 我们打开虚拟机的终端,在根目录下输入命令: ./manager ------->是打开达梦数据库的管理工具 ./dts --------------->是打 ...

  4. 浅谈DM达梦数据库安全管理之用户身份验证与权限管理

            数据库安全管理是指采取各种安全措施对数据库及其相关文件和数据进行保护.DM达梦数据库提供了包括用户标识与鉴别.自主与强制访问控制.通信与存储 加密.审计等丰富的安全功能.达梦数据库 的 ...

  5. ORACLE迁移到DM/达梦 Mysql迁移到DM/达梦 SQLSERVER迁移到DM/达梦 超级有用参考文档!!!

    ORACLE迁移到DM/达梦 Mysql迁移到DM/达梦 SQLSERVER迁移到DM/达梦 超级有用参考文档!!! 在达梦的论坛上,有专门的手记写了这三种数据库迁移到达梦!!超级好用!!!!!!!! ...

  6. 国产数据库--DM(达梦数据库)

    公司简介 武汉华工达梦数据库有限公司(达梦公司)是国家规划布局内重点软件企业.公司成立于2000年11月,得到了国家计委.科技部.信息产业部.总装备部.公安部等中央部委.省市政府的支持扶植. 达梦数据 ...

  7. Oracle通过DBLINK访问达梦数据库

    环境需求 需要安装配置以下相关软件: 1.Oracle Gateways 2.ODBC数据源(gateway机器) 3.达梦数据库软件(gateway机器) 安装配置 Windows环境 安装达梦数据 ...

  8. dm服务器未能启动,DM 达梦数据库 创建服务 无法创建目录_REPLACE_SELF_DM_HOME 错误解决方法...

    在升级DM 8.1.1.19升级到8.1.1.48 的操作中,创建的服务无法正常启动. 但手工执行dmserver 命令是可以启动达梦实例. https://www.cndba.cn/dave/art ...

  9. DM达梦数据库的修改数据库和修改系统命令

    第一部分,修改系统命令ALTER SYSTEM                                                                              ...

最新文章

  1. 在CentOS 7.7 x86_64上安装InfluxDB 1.8.0实录
  2. 深入python3 (Dive Into Python 3) 在线阅读与下载
  3. 201602021344_《Javascript柯里化uncurrying()(将内置方法独立成为一个通用方法)》
  4. nginx 转发慢_学习Nginx的正确姿势,多图详解助你更上一层楼!(干货收藏篇)...
  5. 关于 Node.js 参数 max-old-space-size
  6. Beats与Jenkins日志读取在Windows上的基本实现
  7. [HNOI2016]序列(莫队,RMQ)
  8. linux brew 安装mysql_mac下通过brew安装mysql
  9. LibSvm使用说明和LibSvm源码解析
  10. 【作图】origin制作图中图
  11. Python数据处理Tips数据预处理操作方法汇总
  12. linux校验密码错误,linux 命令 如何做密码校验
  13. word格式文档在linux打开吗,ubuntu 打开word文档 ubuntu word 文档
  14. 基于opencv的MTF算法开发
  15. Java学习——File类
  16. ES7241D低功耗音频ADC芯片##小爱音响
  17. 2020腾讯、百度、华为Android面试题校招汇总(已拿offer
  18. 数组和广义表 - [数据结构]
  19. 【mysql】聚簇索引(聚集索引)和非聚簇索引(二级索引、辅助索引)的区别
  20. android onGenericMotionEvent(MotionEvent event)

热门文章

  1. 作为一名Java开发者应该掌握的基础知识汇总!
  2. linux c语言定位显示字符,Linux c语言实现修改文本字符串
  3. java类的命名规范_浅谈Java中的命名规范
  4. matlab中boxplot函数的参数设置_matlab中boxplot字体大小设置
  5. java 并发编程实例_Java并发编程案例解读
  6. 友盟 点完登陆后无反应_高考缴费艺术生到底该交多少钱?密码找不到了怎么办?等级考缴费吗?点进来查看!...
  7. python迭代器生成器装饰器
  8. 爬虫实战:批量爬取京东内衣图片(自动爬取多页,非一页)
  9. wxWidgets:wxKeyEvent类用法
  10. wxWidgets:wxHelpController类用法