sql - 查询 View 时的性能

标签 sql sql-server performance

我想知道这是否是一种不好的做法,或者总的来说这是否是正确的方法。

假设我创建了一个 View ,该 View 组合了几个表中的一些属性。

我的问题是,我需要做什么才能像查询表一样查询此 View 而不用担心性能?

原始表中的所有属性都已建立索引,我担心结果 View 将包含数十万条记录,我希望根据用户输入缩小范围。

我想避免的是,生成此 View 的代码的多个版本带有一些额外的“where”条件,以方便用户输入过滤。

例如,假设我的 View 具有此标题VIEW(Name, Type, DateEntered),这可能有 100,000 多行(可能有数百万行)。我希望能够在 SQL Server 中创建此 View ,然后在我的应用程序中编写如下查询:

从 MyView 中选择名称、类型、输入日期,其中输入日期位于 @date1 和 @date2 之间;

基本上,我正在对需要运行的一系列报告的数据进行非规范化,并且我想集中从何处提取数据,但也许我没有从正确的角度看待这个问题,所以我愿意接受其他方法来解决这个问题。

最佳答案

My question, what do I need to do so I can query against this view as if it were a table without worrying about performance?

SQL Server 在 View 取消嵌套方面非常出色。

您的查询将像在查询本身中使用 View 的查询一样高效。

这意味着

CREATE VIEW myview AS
SELECT  *
FROM    /* complex joins */

SELECT  *
FROM    mytable
JOIN    myiew
ON      …

SELECT  *
FROM    mytable
JOIN    (
        SELECT  *
        FROM    /* complex joins */
        ) myview
ON      …

将具有相同的性能。

关于sql - 查询 View 时的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2875980/

相关文章:

javascript - 加快列表的 jQuery 操作

java - Date - Java 到 Sql 表以及 sql 表通过 Joda Time 到 Java

php - Mysql 查询针对类别显示同一列两次

sql - 如何解锁 SQL Server 2005 Management Studio 中的用户帐户?

mysql - 什么对表演更好 : IN or OR

Java 循环效率 ("for"与 "foreach")

sql - 在 PostgreSQL 中组合两个 SELECT 查询

sql - 如何更新 SQL 中游标获取的列

asp.net - 在没有 SSRS 的情况下处理 rdl/rdlc 报告文件?

c# - 以编程方式分离数据库