小编Ted*_*olo的帖子

交叉应用(选择顶部 1)比 row_number() 慢得多

使用 AdventureWorks,下面列出了对For each Product get any 1 row of its associated SalesOrderDetail.

使用cross apply它需要14000ms。等效row_number版本仅需要 70 毫秒(快 200 倍)。

cross apply也比inner join所有 Products 和 SalesOrderDetails的简单返回 121317 行(当限制为 TOP 1 时为 266 行)慢。

我更喜欢cross apply这种查询的语法,因为它比row_number版本更简洁。但显然该cross apply版本使用了非常低效的执行计划,而且速度太慢而无法使用。

在我看来,查询没有按预期工作。运行这个简单的查询应该不会花费 14 秒。我cross apply在其他情况下使用过,从来没有遇到过这么慢的事情。我的问题是:这个让查询优化器感到困惑的特定查询呢?是否有任何查询提示可用于帮助它使用最佳执行计划?正如@pacreely 所建议的,我为每个查询添加了统计信息。

--CROSS APPLY ~14000ms
SELECT  P.ProductID
       ,P.Name
       ,P.ProductNumber
       ,P.Color
       ,SOD.SalesOrderID
       ,SOD.UnitPrice
       ,SOD.UnitPriceDiscount
       ,SOD.LineTotal
FROM    Production.Product P
        CROSS APPLY ( SELECT TOP 1
                                *
                      FROM      Sales.SalesOrderDetail …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server performance

6
推荐指数
1
解决办法
1万
查看次数

构建错误:LC:错误 LC0000:'给定的程序集名称或代码库无效。(来自 HRESULT 的异常:0x80131047)'

我在 Visual Studio 的构建输出中收到了这个相当神秘的消息。没有其他错误,但构建失败。

LC : error LC0000: 'The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)'
Run Code Online (Sandbox Code Playgroud)

visual-studio

2
推荐指数
1
解决办法
2021
查看次数

标签 统计

performance ×1

sql ×1

sql-server ×1

t-sql ×1

visual-studio ×1