我有一个有点复杂的查询,其中包含多个(嵌套)子查询,我想为应用程序开发人员提供这些查询。该查询是通用的,并在一组数据集上生成具有计算值的视图,并且开发人员预计只需要查询返回的一些记录(即它们将限制某些实体的 ID 或日期范围或某些的结果这样的)。
我可以看到 3 种方法来实现这一点:
- 让开发人员将查询嵌入到每个应用程序中,并根据需要添加自己的
WHERE
子句。 - 创建一个存储过程,它接受我希望开发人员需要的所有条件作为参数(为了论证,可以说我可以预测在可预见的将来需要什么),该过程将运行复杂的查询并过滤它根据传递的参数。
- 将查询实现为具有多个子视图的视图(因为 MySQL 不允许视图中的子查询),并让开发人员将其用作表并用于
WHERE
让每个应用程序应用他们需要的过滤器。目前我正在查看 3 个额外的子视图,主要是因为一些子查询被多次使用,并且将它们作为子视图执行可以防止重复 - 否则它可能会更糟;-)。
什么是更好的性能明智?(假设所有索引在所有情况下都是等效的)如果可能,请尝试最坏的情况。
你认为在代码维护方面什么会更好?