日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2024/9/27 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle数据库计数器,DM 达梦数据库 表的 行计数器(COUNTER)属性 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 表行計(jì)數(shù)器 說(shuō)明

默認(rèn)情況下,DM 達(dá)夢(mèng)數(shù)據(jù)庫(kù)count() 是秒回結(jié)果的,不受表中實(shí)際行數(shù)的影響,執(zhí)行select count() 都能立即返回正確的結(jié)果。因?yàn)檫_(dá)夢(mèng)數(shù)據(jù)庫(kù)的count(*)操作不需要執(zhí)行全表掃描,直接讀取表行計(jì)數(shù)器的結(jié)果。

這個(gè)表行計(jì)數(shù)器實(shí)際上是表的一個(gè)存儲(chǔ)屬性,在創(chuàng)建表時(shí)可以指定是否啟用表行計(jì)數(shù)器。默認(rèn)為啟動(dòng),可以配置為如下2個(gè)值:

WITH COUNTER:默認(rèn)值,在表上維護(hù)當(dāng)前表內(nèi)的行數(shù);

WITHOUT COUNTER:表上只維護(hù)一個(gè)非實(shí)時(shí)的大概的行數(shù);https://www.cndba.cn/dave/article/3829

如果表啟用了WITH COUNTER 屬性, SELECT COUNT(*)時(shí)服務(wù)器直接取行數(shù)返回即可,可以快速響應(yīng);

如果表是 WITHOUT COUNTER 屬性,服務(wù)器需要先掃描 B 樹(shù)獲取行數(shù)返回后才能響應(yīng)。

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

2 測(cè)試

2.1 創(chuàng)建默認(rèn)啟用counter的表cndba

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

服務(wù)器[LOCALHOST:5236]:處于普通打開(kāi)狀態(tài)

登錄使用時(shí)間: 12.679(毫秒)

disql V8

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

操作已執(zhí)行

已用時(shí)間: 9.588(毫秒). 執(zhí)行號(hào):3281.

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

影響行數(shù) 1

已用時(shí)間: 1.908(毫秒). 執(zhí)行號(hào):3282.

SQL> commit;

操作已執(zhí)行

已用時(shí)間: 1.376(毫秒). 執(zhí)行號(hào):3283.

SQL>

查看此時(shí)的執(zhí)行計(jì)劃

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),

已用時(shí)間: 29.509(毫秒). 執(zhí)行號(hào):0.

SQL>

2.2 創(chuàng)建沒(méi)有啟用counter的表cndba2

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

操作已執(zhí)行

已用時(shí)間: 5.633(毫秒). 執(zhí)行號(hào):3284.

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

影響行數(shù) 1

已用時(shí)間: 2.107(毫秒). 執(zhí)行號(hào):3285.

SQL> commit;

操作已執(zhí)行

已用時(shí)間: 1.856(毫秒). 執(zhí)行號(hào):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)

已用時(shí)間: 1.307(毫秒). 執(zhí)行號(hào):0.

SQL>

2.3 對(duì)比

2.3.1 查看表的定義語(yǔ)句

[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]#

未啟用表行計(jì)數(shù)器:

[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 執(zhí)行計(jì)劃的操作符

啟用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 表示:快速聚集,如果沒(méi)有 where 條件,且取 count(*), 或者基于索引的 MAX/MIN 值,則可以快速取得集函數(shù)的值

未啟用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表示:簡(jiǎn)單聚集

CSCN2表示:聚集索引掃描

2.4 Counter 狀態(tài)切換

將cndba 改成不啟用counter:

SQL> alter table cndba without counter;

操作已執(zhí)行

已用時(shí)間: 9.653(毫秒). 執(zhí)行號(hào):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;

操作已執(zhí)行

已用時(shí)間: 5.636(毫秒). 執(zhí)行號(hào):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(*) 時(shí)間對(duì)比

2.5.1 啟用counter

SQL> create table t1 as select * from sysobjects;

操作已執(zhí)行

已用時(shí)間: 11.657(毫秒). 執(zhí)行號(hào):3297.

SQL> insert into t1 select * from t1;

影響行數(shù) 1399

已用時(shí)間: 28.383(毫秒). 執(zhí)行號(hào):3298.

SQL> insert into t1 select * from t1;

影響行數(shù) 2798

已用時(shí)間: 14.120(毫秒). 執(zhí)行號(hào):3299.

SQL> insert into t1 select * from t1;

影響行數(shù) 5596

已用時(shí)間: 21.753(毫秒). 執(zhí)行號(hào):3300.

SQL> commit;

操作已執(zhí)行

已用時(shí)間: 1.950(毫秒). 執(zhí)行號(hào):3301.

SQL> select count(*) from t1;

行號(hào) COUNT(*)

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

1 11192

已用時(shí)間: 1.902(毫秒). 執(zhí)行號(hào):3302.

2.5.2 未啟用counter

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

操作已執(zhí)行

已用時(shí)間: 7.219(毫秒). 執(zhí)行號(hào):3303.

SQL> alter table t2 without counter;

操作已執(zhí)行

已用時(shí)間: 7.715(毫秒). 執(zhí)行號(hào):3304.

SQL> insert into t2 select * from t1;

影響行數(shù) 11192

已用時(shí)間: 31.559(毫秒). 執(zhí)行號(hào):3305.

SQL> commit;

操作已執(zhí)行

已用時(shí)間: 1.500(毫秒). 執(zhí)行號(hào):3306.

SQL> select count(*) from t2;

行號(hào) COUNT(*)

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

1 11192

已用時(shí)間: 2.608(毫秒). 執(zhí)行號(hào):3307.

SQL>

我們這里僅僅是1w多條數(shù)據(jù),如果是上千萬(wàn)級(jí)別的記錄數(shù),那么時(shí)間差距就會(huì)更明顯一些。

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

版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。

總結(jié)

以上是生活随笔為你收集整理的oracle数据库计数器,DM 达梦数据库 表的 行计数器(COUNTER)属性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。