假设我的Web应用程序中具有以下模型:
Table User:
(attr1, attr2, attr3, ...)
Table Prize:
(condition1, condition2, condition3, prize_val)
应用逻辑是:如果用户满足奖品的所有条件,我想授予他奖品。条件可以是NULL(对所有用户都是正确的)或特定值。可以使用用户属性来计算每个条件。我可以通过2种方式进行过滤:
SELECT prize from Prize where (condition1=NULL or condition1=user_condition1) and (condition2=NULL or condition2=user_condition2) ...
我的问题是:哪一个效率更高?
一个更普遍的问题是:什么时候用应用程序代码而不是SQL进行过滤更好?
PS。我什至考虑代码中的迭代的原因是:如果我在代码中进行迭代,并且奖品的condition1为NULL,则无需为用户计算condition1值(这种计算可能会很昂贵);但是,如果我采用SQL方法,则必须为用户预先计算每个条件值。
最佳答案
因此,建议保留在数据库中。
数据应在数据库中,逻辑应在代码中。
在您的情况下,条件正在提供数据,并且数据会发生变化。但是逻辑保持不变。
希望我明白。