Gab*_*rio 7 performance sql-server execution-plan sql-server-2017 query-performance
查询:
SELECT Object1.Column1, Object2.Column2 AS Column3, Object2.Column4 AS Column5,
Object3.Column6, Object3.Column7,Object1.Column8, Object1.Column9,
Object1.Column10, Object1.Column11, Object1.Column12, Object1.Column13,
Object1.Column14, Object1.Column15 as Column15, Object1.Column16,
Object4.Column4 AS Column17, Object4.Column2 AS Column18, Object1.Column19,
Object1.Column20, Object1.Column21, Object1.Column22, Object1.Column23,
Object1.Column24, Object1.Column25, Object1.Column26, Object5.Column4,
Object1.Column27, Object1.Column28, Object1.Column29, Object3.Column30,
Object3.Column1 as Column31, Object3.Column32 as Column33, Object1.Column34
as Column34, ? AS Column35 , Object3.Column36 as Column37
FROM Object6 AS Object1
INNER JOIN Object7 AS Object3 ON Object1.Column38 = Object3.Column1
INNER JOIN Object8 AS Object2 ON Object3.Column30 = Object2.Column1
LEFT JOIN Object9 AS Object4 ON Object1.Column16 = Object4.Column2
LEFT JOIN Object10 AS Object5 ON Object1.Column9 = Object5.Column2
WHERE Object2.Column1 <> ? AND Object1.Column8 = ?
AND ( coalesce(Column16,?)= ? )
AND EXISTS (
SELECT ?
FROM Object11
WHERE Column39 = ?
AND Column30 = Object3.Column30)
ORDER BY Column7 desc
OFFSET ? ROWS FETCH FIRST ? ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
我知道我应该为此添加一个索引:
Database1.Schema1.Object7.Column30、Database1.Schema1.Object7.Column36、Database1.Schema1.Object7.Column6、Database1.Schema1.Object7.Column32
但其中一列是 varchar 4000 并且由于该字段的大维度而无法创建。
我注意到只有当返回的行少于获取第一个数字时才需要 25 秒
执行计划Object7首先使用非覆盖索引按Column7顺序访问。然后它对该表进行一些关键查找,并嵌套循环连接其他表,最终连接结果到达TOP仍由 排序的运算符Column7。
一旦它收到足够的行来满足OFFSET ... FETCH它就可以停止从下游操作员请求更多的行。SQL Server 估计Object7.Column7在到达这一点之前,它只需要从初始索引开始读取 2419 行。
这个估计根本不正确。事实上,它最终Object7会在OFFSET ... FETCH满足之前读取整个行并且可能用完行。
半连接Object11减少了几乎一半的行数,但杀手是Object6同一个表上的连接和谓词。这些一起将9,753,116来自半连接的行减少到2.
你可以尝试花一些时间看的参与,试图得到基数估计从这些连接更加准确或者你也可以添加表的统计信息OPTION (USE HINT ('DISABLE_OPTIMIZER_ROWGOAL') ),以便该计划没有假设,计算费用,这可以归因于提前停止OFFSET ... FETCH-这肯定会给你一个不同的计划。
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |