我有SQL Server 2008 Express,所以我没有所有的工具来查看幕后发生的事情。有人向我建议,由于多语句表函数是一个“黑盒子”,SQL Server可能会忽略以下内容:
OPTION (OPTIMIZE FOR (@JobID UNKNOWN, @Status UNKNOWN, @ResellerID UNKNOWN))
有没有人有这方面的证据?
我知道如果我使用存储过程,这不会是一个问题。但是,使用多语句表函数为我需要做的事情提供了很多便利。
答案 0 :(得分:1)
使用Express,您可以获得与任何其他版本相同的信息,您只是没有GUI工具来 mangle 显示它。例如,执行计划仍然可以在sys.dm_exec_query_plan
等DMV中使用。
我不确定你问的问题是什么,但是对于多语句表函数来说,内联表函数是很多更好的选择。优化器可以看到TVF的功能,并可以在整个查询的上下文中正确地优化它,可能会消除对函数的不必要调用或选择有助于减少整个查询的总体时间的访问路径(索引)。使用多语句TVF,计划被迫每次有效地调用和评估函数(即,对于每个候选行)并查看结果是什么。这可能是你的朋友说多语句TVF是“黑盒子”的意思。