避免特定表行的sql连接

时间:2018-06-19 07:05:11

标签: c# sql asp.net asp.net-mvc asp.net-core

在我的asp.net mvc应用程序中, 我有一个名为“Preference”的表,此表将始终只有一行用于应用程序首选项(同样,此表不能包含多行)。

当我想查询任何其他表时,我总是使用Preference表进行左连接,例如,如果我想返回所有客户。我必须使用Preference表进行左连接以检查是否需要返回客户的全名,或检查是否需要返回活跃客户等。

如您所知,左连接具有性能成本,尤其是当我需要在每个查询中使用它时;那么,有没有其他方法可以让我一次性采取这些偏好? (例如,当应用程序启动时)并且不使用左连接;虽然每次在数据库中更新这些首选项时都需要更新这些首选项(来自应用程序的控制面板)。

我需要一个没有任何性能成本的解决方案,所以我不会非常推荐会话解决方案。

你有什么建议?

4 个答案:

答案 0 :(得分:4)

你可以使用singleton类,它有两个get和set方法。 每次更改首选项时都会设置呼叫。 并依赖于值形式get方法构建您的查询(无论是否有效,全名或不是)。

答案 1 :(得分:1)

做INNER JOIN - 在大多数情况下它具有更好的性能。如果您确定首选项有1行,您甚至可以进行笛卡尔或交叉连接(无需加入条件)。

答案 2 :(得分:1)

有很多方法可以解决这个问题。

一种方式是:

在应用程序启动时,从数据库加载行并缓存它。每当您需要一个值时,请从缓存中检索它。

现在,我们假设通过管理面板更改了应用程序设置。保存后,清除缓存的值并从数据库重新加载。 没有理由继续加入你的数据库。

答案 3 :(得分:0)

一种选择是创建一个Singleton服务,该服务在启动时加载表,并用于在更新时存储任何值(通过控制面板)。您可以将该服务注入需要访问数据的任何控制器,并且控制器不需要访问数据库,因为该服务会将数据保存在内存中。