【问题标题】:Performance on Large volume heavy read load data on SQL Server 2008SQL Server 2008 上大量重读负载数据的性能
【发布时间】:2012-07-24 11:29:22
【问题描述】:

我遇到了性能问题。

我们有一个包含几百万条记录的表格,并且我们正在提供一个网页,该网页每秒点击该表格 100 次(选择)。该查询被一个非聚集索引覆盖(也包含在一个 SP 中)

我的问题是对于我们想要提高性能的特定场景,我们是否明智地创建一个视图,该视图始终会为该场景产生 300 行并索引视图并查询视图,或者它不会如果我用覆盖的查询查询现有的 2M plus 表有什么区别?

【问题讨论】:

  • 据我所知,视图只是在幕后运行选择 - 我认为这不会为您提供优势。

标签: sql sql-server-2008 sqlperformance


【解决方案1】:

您可以创建一个尽可能匹配您的查询的视图并将其编入索引。据我了解,您只想应用 where 子句。这将起作用,它将把 where 的运行时成本降低到零。它还将删除所有不符合条件的行的 IO。这是个好主意。

但是,您可以只使用过滤(覆盖)索引,这要简单得多。

从覆盖索引中获取范围的速度尽可能快。它非常快。没有改进的可能。

真正的问题似乎是您正在查询数据库 100 次!您不能将这些查询折叠成一个或很少几个更大的查询吗?您可以使用表值参数一次提交多个查询输入。

【讨论】:

  • 你误会了。没有顶部,我们正在为这种情况应用 where 子句过滤器,并使其成为视图并索引视图。我想要这种方法和直接查询表(也有索引)之间的性能差异
  • 我编辑了我的答案以反映我对这个问题的新理解。
  • @user1548513 我们几乎不可能猜测特定硬件/数据库设计的性能差异。这类问题的答案通常是试试看,恐怕。
【解决方案2】:

嗨,根据我的理解,对于一个总是产生 300 行的特定场景,您正在创建一个视图。因此,如果这是一种情况,它是处理此问题的最佳方法。同时在选择性列上创建覆盖索引该视图肯定会提高性能。

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    相关资源
    最近更新 更多