在我给出更多细节之前,我不确定是否有一个普遍的答案。
例如:我有一个名为 vw_View
的 View
我尝试了以下两个查询来获得结果:
在 master 数据库下
select * From [test].[dbo].[vw_View]
正在测试数据库
select * From [dbo].[vw_View]
谁能告诉我为什么从 master
数据库查询同一个查询比从其他数据库查询慢得多,我什至尝试了其他数据库:
Use [db] --any other databases not master database
select * From [test].[dbo].[vw_View]
我检查了实际的执行计划,连接顺序不同,但为什么它会改变,因为我已经在 master< 下指定了
[test].[dbo].[vw_View]
/
出于好奇,在此先感谢。
最佳答案
注意这可能不是答案,但它的文本太多,无法评论...
我们经常听到的一件事是开发人员提示一个运行缓慢的过程,该过程仅在从应用程序调用时运行缓慢,但在从 SSMS 执行时运行良好。
这通常是由于不同的执行设置导致的,具体取决于调用过程的位置。为了检查这些设置是否存在差异,我通常使用 SQL Profiler。
在您的情况下,您可以在 SSMS 中打开两个不同的窗口,一个在 Master
数据库的上下文中,另一个在 User Database
的上下文中,然后运行 SQL Profiler ,第一个事件探查器将捕获,将是 Event Class = Existing Connections
和 Text Data = -- network protocol: LPC.....
。
此记录将向您显示您正在执行命令的每个 session 的所有默认设置,这些设置看起来像......
-- network protocol: LPC
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed
现在比较两个 session 的设置,看看有什么不同。
探查器还有一列 SIPD
可以帮助您识别哪个窗口是哪个。我很确定答案就在那里。
关于sql - 在 master 数据库下查询 View 比直接在特定数据库下查询慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41553310/