我如何使用视图和索引来提高性能
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
【讨论】:
以上是关于我如何使用视图和索引来提高性能的主要内容,如果未能解决你的问题,请参考以下文章