|
|
1
10
哈哈,试试这个:
谁会猜到呢? |
|
|
2
2
我复制了SQL 2008 SP1上的行为,用SQL UDF替换clf udf dbo.get祖先。我尝试了表值函数和内嵌函数;两者都没有区别。 我还不知道发生了什么,但是其他人的好处,我将在下面包括我的定义。
选择上面的一个定义,然后运行它来观察它挂起:
第二批从来没有 开始 . 它已经过了解析阶段,但似乎在绑定和优化之间迷失了方向。 两个函数的主体在函数包装器之外编译为完全相同的执行计划:
非常有趣。在Microsoft Connect上提交错误报告,让他们告诉你发生了什么。 |
|
|
3
1
这是一个猜测,只是一个猜测,但也许它与优化器如何很好地猜测最佳执行计划有关,但并没有对其进行详尽的搜索。 因此,查询执行的工作方式如下: 分析->绑定->优化->执行 两个查询的解析树肯定是不同的。绑定树是 可能 不同。我对绑定阶段还不太了解,无法确定地声明这一点,但是假设绑定树 是 不同的是,它可能需要不同数量的转换才能使A和B将树绑定到相同的执行计划。 如果需要两个额外的转换才能将查询B转换为~5ms计划,优化器可能会在发现它之前说“足够好”。而对于查询A,~5ms计划可能正好在搜索成本阈值内。 |
|
|
4
0
在第一个语句中,您的联接是
你的第二句话是
但是,a也用作ct中dbo.getAncestors(c.node.getAncestor(1))的别名。试交换
也就是说,我不确定SQL Server在创建CTE时应用正确索引的能力有多强。我以前对此有过一些问题,并且使用了表变量,取得了很大的成功。 |
|
|
5
-1
正如我理解的,在批量使用CTE时,您必须以“;”结束语句。它与with子句的解释有关。试试这个:
|
|
|
wttttt · Spark scala数据框udf返回行 8 年前 |
|
|
LalaJava · Java方法字符模式-初学者 8 年前 |
|
|
user8704018 · 定义函数的一种奇怪类型 8 年前 |
|
|
newbieHalp · 多维数组中对列进行分组和求和的C函数 8 年前 |
|
|
Joshua Howard · 火花聚合器无法正常工作 8 年前 |