我正在尝试让供应商在进度10.2b数据库上创建索引以帮助从所述数据库迁移数据,但是供应商不愿意创建索引,称它可能会影响数据完整性。响应如下。他们在所说的内容中有任何真理/优点吗?
我们不会添加索引但主要原因有很多 原因是,正如您所概述的,Progress选择它使用的索引 基于查询中的参数。例如,如果我们有代码 执行以下操作:
查找a = 1且b = 2
的第一条记录现有索引表明,这将使用索引找到记录 'M',它会找到记录'X'
如果我们向表中添加新索引,则可能存在此代码 可以决定使用新索引来查找记录和返回记录 'Y'而不是。
确保创建索引是任何数据库的核心部分,但也是正确的 在应用之前,开发实践需要大量测试 对产品系统的索引更改。没有测试,完整性 系统无法保证。
所以我对此的想法是:
Progress根据查询中的参数选择它使用的索引
这不是任何数据库通常选择索引的方式吗?根据所需的columns / where子句,它可以决定适当的索引(如果有)。
如果我们向表中添加新索引,则可能存在此代码 可以决定使用新索引来查找记录和返回记录 'Y'而不是。
对我而言,几乎听起来他们已经将程序编程为依赖于“从数据库中抓取第一条记录”。如果要使用索引,那么肯定的是,如果没有指定order by
,它可能会对结果进行不同的排序。如果是这种情况,那就是糟糕的编程。
答案 0 :(得分:1)
我非常同意你的观点:
对我而言,几乎听起来他们已经将程序编程为依赖于#34;从数据库中抓取第一条记录"。如果要使用索引,那么肯定的是,如果没有指定order by,它可能会以不同的顺序排序结果。如果是这种情况,那就是糟糕的编程。
如果他们正确地写了他们的查询,索引不会改变结果 - 只是速度。如果他们离开了订单并且只是依赖索引具有正确的顺序,则另一个索引可能会导致问题。
然而,要强调这一点:那么bug就是查询。