首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对主数据库下的视图进行查询比在特定数据库下直接查询要慢得多。

对主数据库下的视图进行查询比在特定数据库下直接查询要慢得多。
EN

Stack Overflow用户
提问于 2017-01-09 17:12:41
回答 2查看 1.1K关注 0票数 3

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

我有一个名为vw_View的视图

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

  1. 主数据库下的 select * From [test].[dbo].[vw_View]
  2. 测试数据库下的 select * From [dbo].[vw_View]

有人能告诉我为什么对同一个查询进行查询,但是从master数据库查询要比从其他数据库查询慢得多,我甚至通过以下方法尝试了其他查询:

代码语言:javascript
运行
复制
Use [db]    --any other databases not master database
select * From [test].[dbo].[vw_View]

我检查了实际的执行计划,连接顺序不同,但是为什么会改变,因为我已经在master下指定了master

只是出于好奇,提前谢了。

EN

回答 2

Stack Overflow用户

发布于 2017-01-09 17:47:27

注意,这可能不是答案,但它是太多的文字评论无论如何.

我们经常听到的一件事是,当开发人员抱怨运行过程缓慢时,这个过程只在从应用程序调用时运行缓慢,而在从SSMS执行时运行良好。

通常情况下,这是由于不同的执行设置,取决于调用过程的位置。为了检查这些设置是否有差异,我通常使用SQL。

在您的示例中,您可以在SSMS中打开两个不同的窗口--一个在Master数据库的上下文中,另一个在User Database的上下文中并运行SQL,第一个事件分析器将捕获,将是Event Class = Existing ConnectionsText Data = -- network protocol: LPC.....

此记录将显示执行命令的每个会话的所有默认设置,这些设置看起来类似于.

代码语言:javascript
运行
复制
-- 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

现在,比较两个会话的设置,看看有什么不同。

分析器还有一个列SIPD,它将帮助您识别哪个窗口是哪个窗口。我很肯定答案就在那附近。

票数 2
EN

Stack Overflow用户

发布于 2019-10-31 09:17:14

同样的问题--从master执行一个视图会有无限长的时间,但是在“在此服务器上任何其他用户数据库下”执行相同的视图只需要8秒。我有一个刚刚迁移到Server 2017的环境,“所有其他数据库”的兼容性级别= 2008 (或2012)

所以我做了几个测试:

  1. 如果我创建一个默认兼容级别= 2017的新DB并运行查询,它将执行无限长的
  2. 如果我将兼容性级别更改为2008并重新连接-8秒
  3. 如果我将兼容性级别更改为2017 -长期运行

关于查询本身,我们注意到的最后一件事是使用CHARINDEX函数,如果我注释掉它,查询将执行8秒,这两个兼容级别都是相同的。

所以..。看起来,在兼容性级别= 2017上下文下,遗留数据库上的CHARINDEX函数执行有一个混合问题。

解决方案是(如果您可以这样称呼它.)--在(相同的)遗留执行上下文下执行遗留查询。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41553310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档