假设我的Web应用程序中具有以下模型:

Table User:
   (attr1, attr2, attr3, ...)
Table Prize:
   (condition1, condition2, condition3, prize_val)

应用逻辑是:如果用户满足奖品的所有条件,我想授予他奖品。条件可以是NULL(对所有用户都是正确的)或特定值。可以使用用户属性来计算每个条件。我可以通过2种方式进行过滤:
  • 从数据库中获取所有奖励规则(最多100条),并在我的应用程序代码中迭代这些规则,检查当前用户是否满足该规则,以获取奖励列表。
  • 用户SQL进行如下过滤:
    SELECT prize from Prize where (condition1=NULL or condition1=user_condition1) and (condition2=NULL or condition2=user_condition2) ...

  • 我的问题是:哪一个效率更高?

    一个更普遍的问题是:什么时候用应用程序代码而不是SQL进行过滤更好?

    PS。我什至考虑代码中的迭代的原因是:如果我在代码中进行迭代,并且奖品的condition1为NULL,则无需为用户计算condition1值(这种计算可能会很昂贵);但是,如果我采用SQL方法,则必须为用户预先计算每个条件值。

    最佳答案

  • 您有一个条件矩阵,每行都有奖。
  • 条件值可以随奖金值
  • 随时间变化

    因此,建议保留在数据库中。
    数据应在数据库中,逻辑应在代码中。
    在您的情况下,条件正在提供数据,并且数据会发生变化。但是逻辑保持不变。

    希望我明白。

    08-16 23:46