首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图和表之间的连接会影响性能吗?

视图和表之间的连接会影响性能吗?
EN

Stack Overflow用户
提问于 2011-09-23 16:58:04
回答 3查看 3.2K关注 0票数 0

我是sql server新手,

我的经理给了我一份工作,我必须找出sql server 2008中查询的性能。

该查询非常复杂,在视图和表之间进行连接。我在网上读到视图和表之间的连接会导致性能受损吗?

有没有专家可以帮我解决这个问题?我在哪里找到了关于这方面的知识,有什么好链接吗?如何计算sql server中的查询性能?

EN

回答 3

Stack Overflow用户

发布于 2011-09-23 17:04:23

看看查询计划--它可以是任何东西。缺少某个基础视图表上的索引,缺少join表上的索引,等等。

看看这篇由Gail Shaw撰写的关于在SQL Server - part 1part 2中查找性能问题的文章。

票数 4
EN

Stack Overflow用户

发布于 2011-09-23 17:50:38

视图(未被索引/物化)只是一个宏:不多也不少

也就是说,it expands into the outer query。因此,具有3个视图(分别具有4、5和6个联接)的联接成为具有15个联接的单个查询。

这是一个常见的“我可以重用它”的错误: DRY通常不适用于SQL代码。

否则,请参阅Oded的答案

票数 3
EN

Stack Overflow用户

发布于 2011-09-23 17:41:29

Oded是正确的,你绝对应该从查询计划开始。也就是说,您已经可以在较高级别上看到一些东西,例如:

CONVERT(VARCHAR(8000),CN.Note) LIKE '%T B9997%‘

由于索引的工作方式,在前面使用通配符的LIKE搜索在性能方面是个坏消息。如果你仔细想想,很容易在电话簿中找到名字以"Smi“开头的所有人。如果你试图找到名字中任何地方都有"mit“的人,你会发现你需要阅读整个电话簿。SQL Server执行相同的操作-这称为全表扫描,并且通常相当慢。另一个问题是,条件的左侧使用一个函数来修改列(具体地说,将其转换为varchar)。从本质上讲,这再次意味着SQL Server不能使用索引,即使有用于列CN.Note的索引。

我的猜测是,该列是一个text列,并且不允许您更改过滤器逻辑来删除搜索开始时的通配符。在这种情况下,我建议研究一下Full-Text Search / Indexing功能。通过启用全文索引并使用特定的关键字(如CONTAINS ),您应该可以获得更好的性能。

同样(与所有性能优化场景一样),您仍然应该从查询计划开始,看看这是否真的是查询的最大问题。

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

https://stackoverflow.com/questions/7526545

复制
相关文章

相似问题

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