问题标签 [indexed-view]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3085 浏览

sql-server - 索引视图:如何选择聚集索引?

我将基于三个表(SQL Server 2005)建立一个索引视图,它们之间有内连接和外连接。我将针对此视图运行各种查询。所以,我想知道选择要聚集的索引的最佳方法是什么。标准是什么,或者有什么工具可以帮助我。

(对不起,如果我的问题很无聊,我在设计数据库方面没有很多经验)。

提前致谢!

编辑:我应该在这里澄清一下,我在视图中使用的表的使用非常频繁,我为维护索引所花费的任何开销都应该得到回报。

0 投票
6 回答
782 浏览

sql - SQL 2005 的索引视图缓慢

假设我有一个很长的表(约 3500 万行),名为 TimeCard,只有 5 列(tableID、CompanyID、UserID、ProjectID、DailyHoursWorked、entryDate)。这是一个非常简单的表格,记录了每个公司每个项目每天的员工工作时间。

我现在需要生成一份报告,以找出任何给定公司每个项目每月员工的总工作时间。我不想在报表运行时执行所需的聚合,而是想构建一个类似表格的数据结构,其中已经包含按月聚合的所有公司/项目/用户数据,因此当报表运行时,我可以直接查询该数据结构无需执行任何运行时聚合,因为大约 3500 万条记录可能需要几分钟。

所以我有两种不同的方式。一个人创建了一个额外的物理表,其中 (CompanyID, UserID, ProjectID, MonthlyHoursWorked, Month) 作为我的列,然后在 TimeCard 表中使用触发器来修改额外表中的值。或者我可以创建一个索引视图。所以我两个都试了。我首先使用以下代码尝试了索引视图:

正确创建的索引视图总共有大约 500 万行。

但是,每次如果我清除 SQL 缓存并运行以下查询:*select * from vw_myView where companyID = 1*,则需要将近 3 分钟。如果我使用上面提到的额外表路由,清除缓存,大约需要 4 秒。

我的问题是,索引视图对于这种特定情况是一个糟糕的选择吗?特别是我很想知道每次更改基础表(TimeCard)或针对它运行查询时是否重新计算/重新聚合整个索引视图?

谢谢!

0 投票
1 回答
1297 浏览

sql - MySQL 是否有相当于 SQL Server 的“索引视图”?

MySQL 是否具有与 SQL Server 的“索引视图”功能相同的功能?

视图比简单查询快吗?

我特别寻找的是一种让 MySQL 创建一个“视图”的方法,它比简单地执行下划线视图的查询/sql 更快地返回结果。

0 投票
2 回答
1576 浏览

sql - 如何制定聚合不同值的 SQL Server 索引视图?

我有一个包含如下表的模式(伪模式):

我需要汇总每个 ItemCollectionId 的不同贡献者的数量。这可以通过如下查询来实现:

我还想使用索引(物化)视图预先计算此聚合。DISTINCT 防止在此视图上放置索引。有什么方法可以重新制定这不会违反 SQL Server 的索引视图约束?

0 投票
2 回答
424 浏览

sql-server - Sql server 索引视图

好的,我对 sql server 索引视图感到困惑(使用 2008)

我有一个名为的索引视图

作业详情

当我查看执行计划时

它显示了索引视图应该抽象掉的所有其他表的所有底层索引的执行计划。

我认为执行计划将只是 PK_AssignmentDetail 的聚集索引扫描(我认为的聚集索引的名称),但事实并非如此。

这个索引视图似乎没有性能提升我应该做什么?我是否还应该使用所有列创建一个非聚集索引,这样它就不必命中所有其他索引?

任何见解将不胜感激

0 投票
1 回答
2974 浏览

sql-server - SQL Server 上索引视图(=物化视图)的按需刷新模式?

我知道 Oracle 为其物化视图提供了几个刷新模式选项(按需、提交、定期)。Microsoft SQLServer 是否为其索引视图提供相同的功能?

如果没有,如果我的目的是每天+按需导出数据,并且想要避免性能开销问题,我还能如何在 SQLServer 上使用索引视图?是否存在解决方法?

0 投票
1 回答
603 浏览

sql-server - SQL Server 索引视图匹配与连接不起作用的视图

有没有人体验过 SQL Server 2008 R2 何时能够自动匹配包含查询连接的索引视图(也称为物化视图)?

例如视图

无法自动匹配到相同的确切查询。当我直接从这个视图中选择时,with (noexpand)我实际上得到了一个更快的查询计划,它对索引视图的聚集索引进行扫描。我可以让 SQL Server 自动进行这种匹配吗?我有很多查询和视图,我不想每次都手动引用索引视图,因为我使用的是 OR 映射器。

我使用的是 SQL Server 2008 R2 的企业版。

编辑:我找到了解决方案。SQL Server 2008 R2 不会自动匹配超过 2 个连接的索引视图。可能它会使优化过程减慢太多。

编辑 2:在我创建问题 2 年后回顾这个问题,我认为我的结论不正确。物化视图匹配是一个非常脆弱的过程,多年来我找不到明确的规则。

当然,以下因素起作用:

  • 连接数
  • 谓词的存在
  • 视图和查询中的联接顺序
0 投票
2 回答
5077 浏览

iphone - iPhone联系人应用程序样式的索引表视图实现

我的要求: 我有这个直截了当的要求,即在索引表视图中按字母顺序列出人员姓名,索引标题是字母的起始字母(另外还有顶部的搜索图标和 # 以显示以数字开头的杂项值和其他特殊字符)。

到目前为止我所做的: 1. 我正在使用核心数据进行存储,并且“last_name”被建模为联系人实体中的字符串属性 2.我正在使用 NSFetchedResultsController 来显示已排序的索引表视图。

完成我的要求的问题: 1. 首先,我无法让章节索引标题成为字母的第一个字母。戴夫在以下帖子中的建议帮助我实现了同样的目标:NSFetchedResultsController with section created by the first letter of a string

我在 Dave 的建议中遇到的唯一问题是我无法将 misc 命名为分组在“#”索引下。

我尝试过: 1. 我尝试向 NSString(类别)添加自定义比较方法以检查比较和部分是如何进行的,但是在 NSSortDescriptor 选择器中指定时不会调用该自定义方法。

这是一些代码:

获取数据的代码:

您能否让我知道我缺少什么以及如何完成要求?

0 投票
2 回答
852 浏览

sql-server-2008 - SQL Server Management Studio(或 SQL Server)是否评估 *all* 表达式?

这是我的配置:

  • 我有一个可重新运行的批处理脚本,用于更新我的数据库。
  • 在该批处理脚本中,我有如下代码:
    • 如果表“A”不存在,则创建表“A”并将行插入其中。
  • 稍后在该批处理脚本中,我在该表上 创建了一个模式绑定索引视图。
  • 有时,当我重新运行脚本时,即在创建表之后,SQL Server Management Studio 会评估受“如果此表不存在”代码保护的“插入行”代码,并产生以下错误:

    消息 1934,级别 16,状态 1,第 15 行 INSERT 失败,因为以下 SET 选项的设置不正确:'CONCAT_NULL_YIELDS_NULL,ANSI_WARNINGS,ANSI_PADDING,ARITHABORT'。验证 SET 选项对于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作是否正确。

  • 请注意:如果有人在真空中尝试此 INSERT 语句,我完全希望SSMS 生成此错误。
    • 不是当它受到条件块保护时。

我的问题:

SSMS 编译器是否评估所有表达式,无论它们是否实际执行?

0 投票
2 回答
3619 浏览

linq-to-sql - 如何在 Linq to SQL 中使用 NOEXPAND 提示?

我有一个索引视图,我需要为其指定 noexpand 提示以使其合理执行。不幸的是,正如从 NOLOCK 提示修改 Linq to SQL 生成的 T-SQL 查询所看到的那样,似乎没有简单的方法可以直接利用这些提示,或者是否存在?

我的想法是允许通过使用属性或通过 dbml 以声明方式自定义这些东西是有意义的。此外,由于 Linq to SQL 似乎只针对 SQL Server 工作,因此我们也能够利用这些高级功能(如果它们存在)才有意义。尽管我对解决此问题的任何创造性方法感兴趣,但无论实施如何。