【发布时间】:2012-12-14 07:44:05
【问题描述】:
我有一个问题,现在我没有想法。
我正在为数据库应用程序做一些优化。有一种方法(Method_A)被调用了几百次,可以进行这种查询:
SELECT
A.a,
ISNULL(A.b, 'Nothing') As alias_b
ISNULL(B.a, 'N/A') as alias_c
FROM A
LEFT JOIN B on A.fk=B.fk AND B.a = 'SOME_KEY'
WHERE A.c = 'SOME_OTHER_KEY'
导致一行看起来像这样:
[a ][alias_b][ alias_c ]
[ val_a ][ val_b ][val_c|'N/A']
为了优化我的代码,我想做的是在 Method_A 之前发出一个请求,检索所有数据并使 Method_A 过滤客户端。 (它是用 .NET 编码的,我用 DataSet 替换了 OleDBConnection)
我怎样才能实现这种行为?因为如果我使用客户端条件进行过滤,而不是在连接不返回任何内容的情况下得到“N/A”,我只是没有得到任何行,这是一个问题,因为我仍然需要 val_a 和 val_b
感谢您的帮助!
【问题讨论】:
-
您希望将
A和B都单独发送给客户端,然后让客户端加入? -
你如何在客户端进行连接/过滤,这是如何在 LINQ 中进行左连接 stackoverflow.com/questions/700523/linq-to-sql-left-outer-join
-
我一直在寻找服务器端解决方案(在 SELECT 或 WHERE 中),但是是的,我认为我不会选择分别检索 A 和 B 并在客户端进行连接,是我对吗?
-
@m6a-uds 我无法理解您想要完成的任务。
-
如何使用所有已知“SOME_OTHER_KEY”类型值的派生列表加入一个附加连接?然后,您可以在调用 Method_A 之前取回所有可能性。
INNER JOIN (SELECT distinct some_key from some_key_table) keys LEFT JOIN B on A.fk=B.fk AND B.a = keys.some_key
标签: c# sql database optimization sybase