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