sql - 在 master 数据库下查询 View 比直接在特定数据库下查询慢得多

标签 sql sql-server database sql-server-2014

在我给出更多细节之前,我不确定是否有一个普遍的答案。

例如:我有一个名为 vw_View 的 View

我尝试了以下两个查询来获得结果:

  1. 在 master 数据库下 select * From [test].[dbo].[vw_View]

  2. 正在测试数据库 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 ConnectionsText 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/

相关文章:

mysql - 连接四个表的 SQL 查询

java.lang.ClassNotFoundException : com. 微软.jdbc.sqlserver.SQLServerDriver : Am I loading the right driver?

python - Azure pyodbc.Error : ('01000' , "[01000][unixODBC][Driver Manager]Can' t 打开 lib 'ODBC Driver 17 for SQL Server':找不到文件 (0) (SQLDriverConnect)

sql - 从表变量插入的输出给出 : "The multi-part identifier "k. 客户名称“无法绑定(bind)”。

php - 编辑记录列表中选定的记录

sql - SQL 甚至 TSQL 图灵完备吗?

mysql - 帮助构建使用内连接的 sql 查询

sql - 对于 1000 多列且没有连接,我应该使用哪个 DBMS?

MySQL pid 结束(无法启动 mysql)

database - 使用 Clojure/ClojureScript 进行 Web 开发的后端