1表属性COUNTER
1.1背景
使用达梦数据库再也不用担心使用COUNT()了。
1.2概念
《DM8_SQL语言使用手册》中描述:WITH COUNTER:在表上维护当前表内的行数;WITHOUT COUNTER:表上只维护一个非实时的大概的行数;对用户的影响:例如 SELECT COUNT() FROM test; 如果表 test 是 WITHCOUNTER 属性,服务器直接取行数返回即可,可以快速响应;如果表 test
是 WITHOUT COUNTER 属性,服务器需要先扫描 B 树获取行数返回后才能响应。不同的场景,根据需要灵活选择 COUNTER 属性。WITH COUNTER 属性可以通过 ALTER TABLE 语句修改。若省略该选项,默认是 WITHCOUNTER 属性。
2创建新表
2.1创建一个普通表
CREATE TABLE COUNTER_DEMO (ID INT);

2.1.1分析执行计划
EXPLAIN SELECT COUNT(*) FROM COUNTER_DEMO;

通过执行计划走的是FAGR2,快速聚集。
2.2创建一个WITHOUT COUNTER属性表
CREATE TABLE COUNTER_DEMO_WITHOUT(ID INT )STORAGE(WITHOUT COUNTER)

2.2.1分析执行计划
EXPLAIN SELECT COUNT(*) FROM COUNTER_DEMO_WITHOUT;

分析执行,走的是CSCN2(聚集索引扫描)。AAGR2(简单聚集))
3修改旧表
3.1修改COUNTER_DEMO_WITHOUT
ALTER TABLE COUNTER_DEMO_WITHOUT WITH COUNTER

3.1.1查看执行计划
EXPLAIN SELECT COUNT(*) FROM COUNTER_DEMO_WITHOUT;

执行计划已改为快速聚集
3.2修改COUNTER_DEMO
ALTER TABLE COUNTER_DEMO WITHOUT COUNTER;

3.2.1查看执行计划
EXPLAIN SELECT COUNT() FROM COUNTER_DEMO;

执行计划,已经走CSCN2(聚集索引扫描)
4总结
该属性是默认建表就打开的功能。因此在特殊业务场景数据加工中,无需在担心因为count()时间太长,而影响数据性能。




