我正在做一个项目,我们在 SQL 数据库中有一个表,该表可能包含相对大量(数十万)行。
这个项目是用 PHP 编写的,并且使用 PDO 来访问我的数据库。在这个项目中,为了实现“报告”和各种事情,我需要能够从这个表中选择行,通过不同的属性过滤数据,这取决于我将在什么上下文中显示数据。
我很好奇这种情况下一个性能非常好的设计会是什么。我为此考虑了以下选项,但我真的不喜欢其中任何一个:
- 为每种不同的过滤技术编写一个单独的查询(即 API 函数)。这似乎是不可取的,因为我将在每个函数中复制 90% 的 SQL,并且很难维护(例如,如果我需要更改/修复我的一个查询,我现在需要更改/修复所有查询,而不是只有一个)。
- 提供一个 API 函数来检索未过滤的行列表,然后在我的应用程序中过滤它们,而不是使用 SQL。这是不可取的,因为它浪费了很多精力来处理我的应用程序不关心的行。
- 使用单个查询编写单个函数,并带有各种可选参数,如果提供这些参数将改变
WHERE
查询的子句。这可能是我迄今为止最好的选择,但我仍然不确定我是否喜欢它,因为这意味着拥有一个签名非常奇怪的函数,并且有一堆三元语句来WHERE
根据是否更改子句给出了论据。
是否存在一种或多种普遍接受的编程模式来设计提供此类功能的 API?