使用视图提高查询性能

时间:2010-09-14 18:17:05

标签: sql-server database rdbms query-performance

我在SQL Server数据库中有一个包含10多万条记录的大表。该表包含美国所有50个州的特定类型的数据。因此,如果我从这个表创建50个视图,每个状态一个,那么从我的应用程序进行查询的性能是否会得到改善?其他建议?

6 个答案:

答案 0 :(得分:8)

没有。视图是一个扩展的宏,因此无论如何,相同的表最终会在计划中结束。

除非它被编入索引。 50个索引视图很可能是过度杀伤。

如果你的性能很慢,有5000万行(实际上并不是那么多),那么它就是一个索引问题。

编辑:

首先,我会使用weighted missing index dmv query来了解您获得最大收益的地方

答案 1 :(得分:2)

普通(非索引)视图无法提高性能 - 它们可以被认为是SELECT查询的“简写”或“别名”,因为它们下面没有物理结构。

索引视图是一种不同的野兽,但到目前为止你似乎并不需要它们。

您需要在表上创建适当的索引,并且可能重新设计表(例如,将其拆分为多个表)。

如果您需要更具体的建议,请在此处发布表格结构和典型查询的一些示例(您要优化的查询)。

答案 2 :(得分:0)

你走在正确的轨道上:

首先确保索引数据以反映您需要快速读取的内容。然后,由于过滤确实使其更快,我会考虑通过允许通过存储过程(带状态参数)访问数据来过滤状态。

答案 3 :(得分:0)

如果您的执行计划中有正确的索引和用法,那么最大的问题是内存缓存的数量和磁盘的读取速度。创建视图不会解决任何问题,它仍然是同一磁盘/缓存上的相同数据,只是引用它的不同逻辑方式。

答案 4 :(得分:0)

一个简单的建议:

use [YourDataBase]
select * from sys.dm_db_missing_index_details as ddmid

答案 5 :(得分:0)

这是一个如此小的数据库,如果您遇到性能问题,索引错误,您的数据库设计很糟糕,或者您设计的性能不佳的查询。如果设计正确,SQL服务器可以处理数万亿条记录而不会出汗。

如果您使用调用视图的视图,BTW可能是性能杀手。