我开始学习执行计划,并且对哈希匹配的工作原理以及为什么在简单连接中使用它感到困惑:
select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)
Run Code Online (Sandbox Code Playgroud)

据我了解,顶部索引扫描的结果变为可散列的,底部索引聚集扫描中的每一行都被查找。我至少在某种程度上了解哈希表是如何工作的,但我对在这样的示例中究竟哪些值进行了哈希处理感到困惑。
我认为它们之间的公共字段,即 id 被散列是有意义的——但如果是这种情况,为什么要散列一个数字?
给定某种等待,您如何在生产 SQL 2008 R2 服务器上安全地找到导致这些等待的查询?
在这种特殊情况下,我想知道async_network_io.
与 SQL Server 2012 Enterprise Installer 和 SQL Server 2012 Express Management Studio 中的 SSMS 版本有什么不同吗?
Adam Machanic 的 sp_WhoIsActive 在运行时是否返回实际查询计划或估计计划@get_plans=1?
使用 SQL Server 2008 R2,当我将结果另存为 CSV 时,没有标题。我可以通过使用 "Copy with Headers" 复制和粘贴来解决这个问题,或者只是获取标题并将它们粘贴到 CSV 等中,但是有没有更好的方法来做到这一点?
默认安装 SQL Server 2008 R2 后,SQL Server 代理进程似乎设置为手动启动。这是什么原因?出于某种原因,设置为自动是一个坏主意还是毫无意义?
我可以在 SSMS (2008 r2) 中保存某种会话或配置文件,以便在我打开 SSMS 时打开与保存的数据库服务器列表的连接?
例如,我经常会打开 SSMS,然后连接到 SQL Servers NY-DB01、NY-DB02 等......我可以有某种快捷方式来一次打开所有这些吗?
虽然我可以在MSDN 上在线找到谓词的定义:
是一个计算结果为 TRUE、FALSE 或 UNKNOWN 的表达式。谓词用于 WHERE 子句和 HAVING 子句的搜索条件、FROM 子句的连接条件以及其他需要布尔值的结构。
我一直无法找到残差谓词的定义。什么是残差谓词?
将用户角色添加到数据库服务器时,我经常使用 GUI 中的“编写此操作脚本”功能。然后,我只需转到“连接 :: 更改连接”即可在其他服务器上执行相同操作。
有没有办法可以在脚本化操作中指定连接,这样我就不必执行第二个更改连接步骤?
我正在尝试发送数据库邮件,但我收到EXECUTE permission denied on the object 'sp_send_dbmail' database 'msdb', schema 'dbo'.. 我正在运行的代码如下:
SELECT SUSER_NAME(), USER_NAME();
Create USER kyle_temp FOR LOGIN Foo
EXECUTE AS USER = 'kyle_temp';
SELECT SUSER_NAME(), USER_NAME();
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail Profile',
@recipients = 'test@test.com',
@subject = 'Test',
@body = 'Test'
REVERT;
DROP USER kyle_temp
Run Code Online (Sandbox Code Playgroud)
Foo Login 显示它映射到 msdb 中的 Foo 用户。当我查看 msdb 中的 foo 用户时,我看到它已检查“DatabaseMailUserRole”并在 dbo 上执行sp_send_dbmail。
我错过了什么?