Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 避免特定表行的sql联接_C#_Sql_Asp.net_Asp.net Mvc_Asp.net Core - Fatal编程技术网

C# 避免特定表行的sql联接

C# 避免特定表行的sql联接,c#,sql,asp.net,asp.net-mvc,asp.net-core,C#,Sql,Asp.net,Asp.net Mvc,Asp.net Core,在我的asp.net mvc应用程序中, 我有一个名为“Preference”的表,该表始终只有一行用于应用程序首选项(同样,该表不能包含多行) 例如,如果我想返回所有客户,当我想查询任何其他表时,我总是使用首选项表进行左连接。我必须与首选项表进行左连接,以检查是否需要返回客户全名,或者检查是否需要返回活动客户,等等 正如您所知,左连接有一个性能代价,特别是当我需要在每个查询中使用它时;那么,有没有其他方法可以让我一次性接受这些偏好呢?(例如,当应用程序启动时)并且不使用左连接;尽管我需要能够在

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

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

正如您所知,左连接有一个性能代价,特别是当我需要在每个查询中使用它时;那么,有没有其他方法可以让我一次性接受这些偏好呢?(例如,当应用程序启动时)并且不使用左连接;尽管我需要能够在每次更新数据库中的这些首选项时更新它们(从应用程序的控制面板)

我需要一个在性能方面没有任何成本的解决方案,因此我不太推荐会话解决方案


您有什么建议?

您可以使用singleton类,它有两个方法get和set。 每次更改首选项时调用set。
根据get方法的值构建查询(无论是否活动,全名是否)。

您可以使用具有两个get和set方法的singleton类。 每次更改首选项时调用set。
并取决于get方法中的值来生成查询(无论是否活动,全名是否)。

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

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

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

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

有多种方法可以解决此问题

一种方法是:

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

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

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

一种方法是:

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

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

不必担心左加入的性能成本。为什么?我知道在性能表中只加入一行,但我主要为大多数表(客户、订单、发票等)进行连接因此,我认为最好避免左连接,但会话可以提供更好的性能。不要担心左连接的性能成本。为什么?我知道在性能表中只连接一行,但我主要为大多数表(客户、订单、发票等)进行连接因此,我认为最好避免左连接,但会话可以提供更好的性能。@简单地说,ged否,因为我对许多数据库使用相同的web应用程序,换句话说,每个客户都有一个子域与他的数据库连接,通过使用单例,所有用户将共享同一个不正确的对象。@ged否,因为我使用same web app用于许多数据库,换句话说,每个客户都有一个子域与他的数据库连接,通过使用singleton,所有用户都将共享同一个不正确的对象。很好,但所有客户都使用相同的web应用程序,但使用不同的数据库,而每个客户都有一个子域引用他的数据库,但web app是一个,所以这里可能我需要缓存在内存中或用户客户端上?请详细说明,但是所有客户都使用相同的web应用程序,但使用不同的数据库,而每个客户都有一个子域引用他的数据库,但web应用程序是一个,所以这里可能我需要缓存在内存中或用户客户端上?您可以详细说明吗请