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

Database 由于数据完整性,供应商不会创建索引,database,indexing,Database,Indexing,我试图让供应商在progress 10.2b数据库上创建一个索引,以帮助从所述数据库迁移数据,但供应商不愿意创建索引,说这可能会影响数据完整性。答复如下。他们所说的是否真实/有价值 我们不添加指数的原因有很多,但主要原因是 原因是,正如您所概述的,Progress选择了它使用的索引 基于查询中的参数。例如,如果我们有代码 这样做的目的如下: 查找a=1和b=2的第一条记录 由于现有索引的存在,这将使用索引查找记录 “M”会找到记录“X” 如果我们向表中添加一个新索引,则此代码可能 可以决定使用新

我试图让供应商在progress 10.2b数据库上创建一个索引,以帮助从所述数据库迁移数据,但供应商不愿意创建索引,说这可能会影响数据完整性。答复如下。他们所说的是否真实/有价值

我们不添加指数的原因有很多,但主要原因是 原因是,正如您所概述的,Progress选择了它使用的索引 基于查询中的参数。例如,如果我们有代码 这样做的目的如下:

查找a=1和b=2的第一条记录

由于现有索引的存在,这将使用索引查找记录 “M”会找到记录“X”

如果我们向表中添加一个新索引,则此代码可能 可以决定使用新索引查找记录并返回记录 而是“Y”

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

所以我的想法是:

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

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

如果我们向表中添加一个新索引,则此代码可能 可以决定使用新索引查找记录并返回记录 而是“Y”


对我来说,这听起来像是他们的程序依赖于“从数据库中抓取第一条记录”。如果要使用索引,那么当然,如果没有指定
orderby
,它可能会对结果进行不同的排序。如果是这种情况,那就是糟糕的编程。

我非常同意你的看法:

对我来说,这听起来像是他们的程序依赖于“从数据库中抓取第一条记录”。如果要使用索引,那么当然,如果没有指定orderby,它可能会对结果进行不同的排序。如果是这样,那就是糟糕的编程

如果他们正确编写了查询,索引不会改变结果,只会改变速度。如果他们离开了顺序,并且仅仅依赖于索引具有正确的顺序,那么另一个索引可能会导致问题

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