我如何使用视图和索引来提高性能

Posted

技术标签:

【中文标题】我如何使用视图和索引来提高性能【英文标题】:How could I use views and indexing to improve the performance 【发布时间】:2011-09-14 15:33:18 【问题描述】:

我正在处理一些具有基于时间的行并且存在于不同数据库中的表。这个想法是编写存储过程来获取并最终处理数据,这反过来会利用许多连接,这将导致大量数据。然后我会执行某种聚合逻辑来获取所需的数据。

这样的存储可能需要使用循环等并且会非常慢。

我可以使用 Views 来创建一个表,该表已经是一个包含仅需要的行(从连接和聚合中获得)的短列表。我在这里缺少一些基础知识: 1. 视图是否只在运行时获取数据?如果他们这样做,我如何使用它们来提高性能。 2. 我可以使用索引来提高这种视图的性能吗? 3. 游标比循环快吗?我知道我可以使用某种查询来避免循环 - 但假设我必须使用循环,游标会是更好的选择吗?

谢谢...

【问题讨论】:

CUrspors 和 loops 一样糟糕,为什么你认为你需要循环? 【参考方案1】:

索引视图可以提高性能,但可以在线阅读有关它们的书籍,因为对于可以索引的视图类型有很多限制。只要您能满足索引视图必须满足的其他条件,它们确实可以帮助聚合。调用其他视图的视图会大大降低性能,请不要使用它们。

如果您无法使用索引视图来解决问题,为了提高聚合性能,一种策略是将聚合值存储在一个表中,该表在基础数据更改时通过触发器进行更新。这样,每次数据更改只进行一次计算,而不是在选择查询中重复多次。触发器必须仔细编写并处理多个记录插入/更新/删除。如果聚合可能与实时稍微不同步,您可以在作业中而不是触发器中执行此操作。

应用程序代码中很少需要游标和循环。它们的真正用途通常是用于数据库管理任务。为了帮助您了解比循环更好的使用方法,请阅读以下内容: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them

【讨论】:

以上是关于我如何使用视图和索引来提高性能的主要内容,如果未能解决你的问题,请参考以下文章

应该针对不同的排序和过滤条件创建哪些MongoDB索引来提高性能?

如何提高表视图中的 UILabel 性能?

如何提高此视图/查询的性能?

基于函数的索引没有提高查询性能

如何提高基于视图的查询性能?

索引视图以提高 SQL Server 上多个连接的性能