小编Rad*_*ača的帖子

SQL Server 基数提示

有没有办法如何将基数估计“注入”到 SQL Server 优化器(任何版本)?

即类似于 Oracle 的基数提示。

我的动机是由这篇文章驱动的,查询优化器真的有多好?[1],他们测试基数估计量对选择一个糟糕计划的影响。因此,如果我可以强制 SQL Server 精确地“估计”复杂查询的基数就足够了。


[1]莱斯、维克多等人。“查询优化器有多好,真的吗?”
VLDB 基金会会议录 9.3 (2015):204-215。

sql-server optimization

17
推荐指数
2
解决办法
3498
查看次数

SQL Server优化过程揭秘

我们希望看到 SQL Server 优化器在查询优化期间考虑的查询计划的所有变体。SQL Server 使用querytraceon选项提供了非常详细的洞察力。例如,QUERYTRACEON 3604, QUERYTRACEON 8615允许我们打印出 MEMO 结构并QUERYTRACEON 3604, QUERYTRACEON 8619打印出在优化过程中应用的转换规则列表。这很好,但是,我们在跟踪输出方面有几个问题:

  1. 似乎 MEMO 结构只包含查询计划的最终变体或后来被重写为最终变体的变体。有没有办法找到“不成功/没有希望”的查询计划?
  2. MEMO 中的运算符不包含对 SQL 部分的引用。例如,LogOp_Get 运算符不包含对特定表的引用。
  3. 转换规则不包含对 MEMO 运算符的精确引用,因此,我们无法确定转换规则转换了哪些运算符。

让我用一个更详细的例子来展示它。让我有两个人造表AB

WITH x AS (
        SELECT n FROM
        (
            VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)
        ) v(n)
    ),
    t1 AS
    (
        SELECT ones.n + 10 * tens.n + 100 * hundreds.n + 1000 * thousands.n + 10000 * tenthousands.n + …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization

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

标签 统计

optimization ×2

sql-server ×2