小编Jie*_*ong的帖子

使用局部变量时散列连接提示返回错误

下面的查询使用 StackOverflow2010 示例数据库:

DECLARE @Id INT = 18471

SELECT c.UserId FROM dbo.Comments AS c
INNER HASH JOIN dbo.Users AS u
ON c.UserId = u.Id
AND c.UserId = @Id
Run Code Online (Sandbox Code Playgroud)

使用散列连接提示,它返回以下错误:

由于此查询中定义的提示,查询处理器无法生成查询计划。在不指定任何提示且不使用 SET FORCEPLAN 的情况下重新提交查询

当我添加时它有效 OPTION(RECOMPILE)用字符串文字或替换变量。

什么可能导致这个问题?

sql-server hints execution-plan parameter sql-server-2019

5
推荐指数
0
解决办法
167
查看次数

使用功能更新时的远程扫描

为什么在通过链接服务器更新时使用 ISNULL() 使用远程扫描来检索所有行并在本地进行过滤,而不是通过远程查询进行过滤?

UPDATE LINKEDSERVER1.database1.dbo.table1 WITH(ROWLOCK)
SET number = ISNULL(number,0)
WHERE accounts = '123'

UPDATE LINKEDSERVER1.database1.dbo.table1 WITH(ROWLOCK)
SET number = number
WHERE accounts = '123'
Run Code Online (Sandbox Code Playgroud)

执行计划如下: 执行计划1

该表确实有一个针对帐户列的非聚集唯一索引,但 ISNULL() 未用于帐户列并且该索引应该仍然可用。我在这里错过了什么吗?

sql-server execution-plan linked-server sql-server-2014

4
推荐指数
2
解决办法
197
查看次数

4
推荐指数
1
解决办法
985
查看次数

VARCHAR 缺失索引未显示在缺失索引 dmv 或查询计划建议中

我有一个包含 307200 条记录的表,其中 f_column 为 VARCHAR(30)。缺失索引 dmv 中不会显示缺失索引,也不会在执行计划中建议缺失索引。

SELECT f_column, f_column2 FROM t_table WHERE f_column = '23BE46F3-E9A9-4526-A2F8-3F51818025B5'
Run Code Online (Sandbox Code Playgroud)

该查询返回 5 个结果,花费了 9958 次逻辑读取。对于下面的索引,需要 3 次逻辑读取。

CREATE NONCLUSTERED INDEX IX_t_Table_f_column ON t_table (f_column) INCLUDE (f_column2)
Run Code Online (Sandbox Code Playgroud)

当添加索引会给查询带来巨大好处时,什么可能导致缺失索引不会出现在缺失索引 dmv 和执行计划中?

我最初怀疑统计数据,并更新了表的所有统计数据,但问题仍然存在。由于某种原因,添加或更改表上的列将导致 SQLServer 恢复正常,并且缺失的索引会出现在缺失索引 dmv 中以及查询下次执行的执行计划中。

index sql-server sql-server-2017

3
推荐指数
1
解决办法
196
查看次数

无缝 SQLServer 数据库名称更改

我需要更改一些数据库的名称,但是这些数据库被多个不同团队管理的许多应用程序使用。所有应用程序完成更改连接和数据库名称引用需要一些时间。有没有办法让更改无缝完成?正在查看同义词以暂时允许引用重命名的数据库,但不幸的是它仅适用于数据库级别。

sql-server sql-server-2014 rename

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