我们有多个使用 Sybase ASE 的应用程序(目前正在从 15.0 迁移到 15.7)。我正在开发一个通用实用程序,我们所有的 ASE 数据库都可以使用它来清除不需要的旧数据。该实用程序应该在指定的窗口(12:00 到 3:00 AM)运行,并且可以每天缓慢地删除数据,而不会影响其他用户或不会关闭数据库。由于涉及到多个具有不同参数的表,我需要找出一个最佳算法来确定每个事务中删除的行数。- 是否应该使用基于用户缓存/数据缓存/日志空间/其他参数的公式来计算删除的数据量?如果是这样,你能提供一个公式吗?- 现在,我正在使用以下蛮力安全限制并循环删除查询,在每次循环遍历时提交:
set rowcount 100
此外,我们是否有办法考虑以下参数?如果是这样,我应该给这些参数中的每一个赋予多少权重?
- 根据表的最大行大小,动态修复删除的行数?
- 指数:
- 如果删除条件与索引匹配,则删除 tran 中的更多行(多少行?)
- 如果删除条件与索引匹配,请使用“select for update”(ASE 15.7)
- 如果有其他索引与给定的列条件不匹配,我是否应该“选择到#temptbl”匹配输入条件的索引列值,然后删除加入#temptbl?
- 如果根本没有索引,我是否应该使用表的最大行大小设置使用“设置行数”删除的行数?