由于数据完整性,供应商不会创建索引

时间:2014-04-10 03:07:13

标签: database indexing

我正在尝试让供应商在进度10.2b数据库上创建索引以帮助从所述数据库迁移数据,但是供应商不愿意创建索引,称它可能会影响数据完整性。响应如下。他们在所说的内容中有任何真理/优点吗?

  

我们不会添加索引但主要原因有很多   原因是,正如您所概述的,Progress选择它使用的索引   基于查询中的参数。例如,如果我们有代码   执行以下操作:

     

查找a = 1且b = 2

的第一条记录      

现有索引表明,这将使用索引找到记录   'M',它会找到记录'X'

     

如果我们向表中添加新索引,则可能存在此代码   可以决定使用新索引来查找记录和返回记录   'Y'而不是。

     

确保创建索引是任何数据库的核心部分,但也是正确的   在应用之前,开发实践需要大量测试   对产品系统的索引更改。没有测试,完整性   系统无法保证。

所以我对此的想法是:

  

Progress根据查询中的参数选择它使用的索引

这不是任何数据库通常选择索引的方式吗?根据所需的columns / where子句,它可以决定适当的索引(如果有)。

  

如果我们向表中添加新索引,则可能存在此代码   可以决定使用新索引来查找记录和返回记录   'Y'而不是。

对我而言,几乎听起来他们已经将程序编程为依赖于“从数据库中抓取第一条记录”。如果要使用索引,那么肯定的是,如果没有指定order by,它可能会对结果进行不同的排序。如果是这种情况,那就是糟糕的编程。

1 个答案:

答案 0 :(得分:1)

我非常同意你的观点:

  

对我而言,几乎听起来他们已经将程序编程为依赖于#34;从数据库中抓取第一条记录"。如果要使用索引,那么肯定的是,如果没有指定order by,它可能会以不同的顺序排序结果。如果是这种情况,那就是糟糕的编程。

如果他们正确地写了他们的查询,索引不会改变结果 - 只是速度。如果他们离开了订单并且只是依赖索引具有正确的顺序,则另一个索引可能会导致问题。

然而,要强调这一点:那么bug就是查询。