近期启动了基于达梦数据库的大数据量性能测试,发现创建索引后并不会自动更新对应的统计信息。
现象描述
我们在使用达梦数据库的过程中,有时候碰到一个这样子的情况:
Create table manyrows_tables;
Select * from manyrows_tables where col=xx; -- 查询很慢
Create index test_1 on manyrows_tables(col);
Select * from manyrows_tables where col=xx; -- 查询还是很慢?
处理方法
根据达梦的官方文档资料介绍,收集统计信息一共有三种方式:
1. Sp 系统函数: SP_TAB_STAT_INIT ( 'SYSDBA' , 'TEST_TABLE' ); SP_INDEX_STAT_INIT ( 'SYSDBA' , 'IDX_TEST_COL1' );等
2. Stat 命令:Stat 100 on test(col);
3. Dbms_stats 系统包: DBMS_STATS.GATHER_TABLE_STATS('USERNAME','TABLENAME',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
但实测发现,前两种方式都没有生效,DBMS_STATS.GATHER_XX 执行成功后貌似还要等N分钟后,才能真正生效,不清楚DM内部是什么操作逻辑。
根据DM文档和网上资料看,貌似可以创建计划任务作业定时进行统计信息的更新收集。
参考资料:
http://blog.itpub.net/69949798/viewspace-2661599/
https://blog.csdn.net/weixin_42845771/article/details/104772553
DBMS_STATS包 :收集统计信息,删除统计信息
1、table_stats_show 获取表的统计信息。
2、column_stats_show 获取列的统计信息,返回列的统计信息,另一个时直方图的统计信息。
3、index_stats_show 获取索引的统计信息。
GATHER_TABLE_STATS 收集表,表中的列,索引的统计信息
GATHER_INDEX_STATS 收集索引的统计信息。
GATHER_SCHEMA_STATS 收集模式下的对象统计信息。
DLETE_TABLE_STATS 删除表相关的统计信息。
DELETE_INDEX_STATS 删除索引的统计信息。
DELETE_COLUMN_STATS 删除列的统计信息。
那些对象不支持统计信息:
1、外部表、DBLINK远程表 、动态视图表、临时表。
2、所在表空间为OFFLINE的对象。
3、位图索引、全文索引
4、数据类型:blob image clob text… 也不支持 自定义类型和空间类型也不支持。
dbms_stats.gather_schema_stats('USERNAME',100,TRUE,'FOR ALL INDEXED COLUMNS SIZE AUTO');
dbms_stats.gather_table_stats(ownname => 'USERNAME',tabname => 'TABLENAME',estimate_percent => 100 ,method_opt => 'for all columns SIZE AUTO' ,cascade => true);
dbms_stats.index_stats_show ('GSCLOUD2003' , 'IDX_FSBZDJ_BXR');
dbms_stats.column_stats_show ('GSCLOUD2003', 'FSBZDJ' , 'FSBZDJ_BXR');
dbms_stats.column_stats_show ('GSCLOUD2003', 'FSBZDJ' , 'FSBZDJ_USERID');
查看执行计划
explain for select * from t1 where id=1;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2007-08-15 调整主建为自增、表内自关联的主建顺序