0

我有一个使用各种 where 子句的多个表的多个连接的情况。

一个简单的视图总是会运行 select 语句(无论如何都是保存在数据库中的),所以之后过滤数据似乎是在浪费时间。

索引视图会做同样的事情,但也会通过使用索引来加快速度。在 MSDN 我们还读到,当在视图上创建唯一聚集索引时,结果集会像表一样存储在数据库中

多个连接将通过查询的 where 子句带来正确的数据,而无需首先带入所有内容并稍后对其进行过滤(简单视图),也无需为经常更改的数据上的索引视图维护索引,但会导致在更复杂的查询中。

这些连接涉及多达 20 个表(一些外部(2 到 4)连接需要以任何一种方式编写,因为索引视图不支持它们)并且结果行有数千行(每个表中大约 2 到 4 百万行)看法)。

这更像是一个设计问题,但在这种情况下最有效的(性能方面和存储方面)是什么?

PS 在前端环境开发中每次编写查询都非常烦人,这就是我正在寻找另一个解决方案的原因。

4

1 回答 1

1

优化查询性能的一些技巧。

数字 1:尽可能使用过滤器,优化器将使用这些过滤器来限制它返回的数据(有一个 100,000,000 行的表,过滤器实际上加快了查看过程)。

数字 2:隐式转换:隐式转换是指您看不到从一种数据类型到另一种数据类型的转换,但在幕后它们会耗费大量时间。来自远程服务器的 6,000,000 行表。隐式转换的 2 分钟查询时间,隐式转换删除后的 5 秒(顺便说一句 datetime <> smalldatetime)。

第 3 点:使用执行计划,这将使您知道最大的 CPU 密集型操作在哪里(这就是我定位 Datetime -> Smalldatetime 隐式转换的方式)。

于 2013-09-30T17:17:16.087 回答