为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:window
【CPU】:
【问题描述】*:
相同的数据(mysql库通过达梦迁移工具,迁移到达梦)、相同的sql响应时间太长。单表约1000万条数据,达梦单表查询要3秒多,mysql只有几十毫秒。求大佬指导!!急
patrol_task_spot_id列建个索引,然后执行下stat 100 on patrol_task_spot_result(patrol_task_spot_id);
这是个典型问题,涉及如下:
注意迁移的执行结果,关注失败内容以及迁移后对象的完整性比对。您迁移完成后可能是没有做完整性比对,所以没发现遗漏的外键列索引。
针对表外键列,默认不建索引(同Oracle一致),但新版迁移工具提供了外键列索引选项,预计24年一季度发布,届时可使用新版本客户端进行迁移,使用方法即在表映射关系中勾选WITH INDEX复选框(可应用到同类表对象),如下:
对于已经完成迁移的外键不存在索引的情况,可使用以下脚本生成外键索引SQL语句:
SELECT
'alter table "'
||t1.table_NAME
||'" modify constraint "'
||t1.CONSTRAINT_NAME
||'" to foreign key("'
||t3.COLUMN_NAME
||'") references "'
||t2.table_name
||'"("'
||t4.column_name
||'") with index;' as fk_idx_ddl
from
dba_constraints t1 ,
dba_constraints t2 ,
DBA_CONS_COLUMNS t3,
DBA_CONS_COLUMNS T4
where
t1.constraint_type='R'
and t2.constraint_name=t1.r_constraint_name
and t3.constraint_name=t1.constraint_name
AND T2.constraint_name=T4.constraint_name
and t3.owner ='XXX'
最后,统计信息对执行计划的影响很大,注意迁移或有大批量更新(含导入)后应及时更新统计信息,否则即使存在列索引,但也有可能因统计信息缺失或失准导致不走索引。统计信息的收集详见达梦手册https://eco.dameng.com/document/dm/zh-cn/pm/query-optimization.html#22.5%20%E7%BB%9F%E8%AE%A1%E4%BF%A1%E6%81%AF
看左边栏,这张表是没有索引的,创建一个 patrol_task_spot_id 列的索引就可以了