Sql server 2005 案例陈述的替换

Sql server 2005 案例陈述的替换,sql-server-2005,function,view,case,Sql Server 2005,Function,View,Case,我有一个函数,它在一个视图中使用两个case语句。 问题是,由于这个case语句,运行函数需要25秒以上的时间。其中as应该只需要3秒钟(与具有不调用case语句的视图的相同函数相比) case语句在select中完成 有趣的是(对我来说),如果我把一个案例陈述改为直接的ie D.CARS而不是 CASE WHEN D.CAR IS NOT NULL THEN D.CAR ELSE C.CAR END AS CAR, 然后,它会加速到~3秒以运行该功能,但会显示一

我有一个函数,它在一个视图中使用两个case语句。 问题是,由于这个case语句,运行函数需要25秒以上的时间。其中as应该只需要3秒钟(与具有不调用case语句的视图的相同函数相比)

case语句在select中完成

有趣的是(对我来说),如果我把一个案例陈述改为直接的ie D.CARS而不是

CASE WHEN D.CAR IS NOT NULL 
THEN D.CAR              
ELSE C.CAR
END AS CAR,
然后,它会加速到~3秒以运行该功能,但会显示一些关闭结果。因此,如果select语句中有两个case语句,则似乎只需要约25秒

无论case语句的数量如何,视图都不会花费不少于1秒的时间来填充


有没有一种方法可以在获得正确结果的同时加快速度?

为什么不使用
合并
表达式而不是
大小写
表达式

COALESCE(D.CAR, C.CAR) AS CAR

您是否尝试过使用函数而不是case语句?

函数的性能几乎总是比内联查询差;至少,没有更好的。命中率可以忽略不计,它总是提高代码的可读性。想象一下这样的案例语句在众多SP中重现……那么你是说我应该在函数中的视图中有一个函数?我从没想过。我会尝试一下。对不起,应该澄清一下-优化器说它的性能总是更差。我没有发现它确实存在的证据。我的经验正好相反,我从未听说过这个词。让我试一试。在这种情况下,编辑-合并似乎仍能给出准确的时间结果。不过更简洁。如果您在query Analyzer/Management Studio中运行函数中包含的查询并查看执行计划,您会在哪里看到瓶颈?在两个哈希匹配内部联接中有29%和24%,在右联接中有一个25%的哈希匹配。。。。这看起来很奇怪,因为我没有正确的连接?没有看到整个查询(和/或执行计划),这是一种猜测。SQL认为您有权在此处加入。您可能需要表上的额外索引,您可能希望通过调用
内部循环联接来强制循环联接,而不是
内部联接
,您可能希望将函数重新编写为内联查询,等等……好的。调用内部循环联接确实有很大帮助。你能给我解释一下“循环”到底是什么吗?我在sql server f1帮助中找不到它您是否尝试过向视图中添加计算列,而不是调用函数?