问题标签 [materialized-views]
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.
mysql - MySQL 不使用带有 JOIN、WHERE 和 ORDER 的索引
我们有两个类似于简单标签记录结构的表,如下所示(实际上它要复杂得多,但这是问题的本质):
和
问题是获取具有特定标签的有序记录。最明显的方法是在 (PK)(Aa, Ab), (Ab), (PK)(Bb), (Bb,Bc) 上进行简单的连接和索引:
但是,这会给文件排序带来不愉快的结果:
使用巨大且极其冗余的“物化视图”,我们可以获得相当不错的性能,但这会以业务逻辑复杂化为代价,这是我们希望避免的,特别是因为 A 和 B 表已经是 MV:s(并且是其他查询需要,并且实际上使用 UNION 进行相同的查询)。
使情况更加复杂的是我们在 B 表上有条件,例如范围过滤器。
但是如果文件排序问题消失,我们有信心可以处理这个问题。
有谁知道为什么上面代码块 3 中的简单连接不会使用索引进行排序,以及我们是否可以在不创建新 MV 的情况下以某种方式解决问题?
下面是我们用于测试的完整 SQL 列表。
sql - 如何在 sqlite 中创建物化视图?
我对物化视图和 SQLite 进行了无数次搜索。在我能找到的内容中,似乎在 2004 年和 2006 年提到 SQLite 没有物化视图。紧随其后的是 SQLite 从2008 年 3 月开始的更新日志,其中特别提到了优化物化视图。
现在,我从逻辑上认为 2004 和 2006 已经过时,或者 2008 变更日志是错误的。
知道它是什么吗?
如果物化视图现在在 SQLite 中,它们是如何创建的?
sql - 什么会导致 Oracle 10g 中的物化视图停止快速刷新?
如果我在 Oracle 中有物化视图,定义为REFRESH FAST ON COMMIT
每 15 分钟一次。它在最初创建并愉快地刷新时工作。什么会导致它停止快速刷新?
我可以看到它已经停止刷新基于此:
sql - CREATE TABLE AS SELECT killing MySQL
We run a MySQL server with moderate load (200-300 QPS) on quite powerful hardware (HP DL360 with 8 Xeon cores, 8Gb RAM and RAID10). All the tables are innodb and the active dataset fits within the allocated innodb_buffer_pool_size
.
Our database is normalized and to reduce the number of joins we use materialized views to flatten the dataset. As the data is added in batches a few times a day the MV:s are regenerated using CREATE TABLE AS SELECT
instead of dynamically updated using complex triggers.
The problem is that sometimes while these CREATE
queries are run (each of which takes anything from 5 to 50 seconds) other unrelated queries to the server seems to get queued up behind the CREATE
query, leading to a unresponsive database.
To (re-)generate the MV:s we use something like this:
The EXPLAIN of the SELECT produces something like:
Any ideas why the CREATE TABLE AS
completly overload our server and how I can prevent it?
Regards,
sql-server - 查询/数据库优化:如何优化?(我应该使用物化视图吗?)
我有一个关于如何优化查询的问题。实际上,由于我要经常运行查询,我正在考虑使用物化视图或索引视图(这是一个好主意吗?)或非规范化。
考虑以下四个表(省略了不相关的字段):
- 用户(int userId)
- 组(int groupId)
- GroupMemberships (int userId, int groupId, bool isSharing)
- 计算机(int userId)
关系是一个用户可以拥有 0..n 台计算机(一个用户对多台计算机)并且可以是 0..n 个组的成员。一个组可以有 0..n 个用户(许多用户对许多组)。“isSharing”表示用户是否正在与该组共享,或者是该组的“只读”成员(即,可以看到共享成员的计算机,但不能共享她自己的)。
查询是为给定用户查找该用户可以看到哪些计算机。用户可以看到她自己的所有计算机。她还可以查看属于她的成员并与该组共享的组中的其他用户的任何计算机。好的,这没有多大意义,所以这是 O(n^3) psudocode 中的目标:
现在我正在使用 ORM 映射器并基本上执行上述操作(我对整个 SQL 事情不太擅长),但这显然是一个不太理想的解决方案。我在此处列出的每个字段(isShared 除外)上都有索引,在 GroupMembership 的 (userId, groupId) 元组上有一个额外的索引。但是那里的任何数据库向导都可以想到更好的解决方案吗?
该项目尚未上线,但我猜每个用户平均可能有 1.2 台计算机(每个人都有一台,少数人可能有更多),每个用户可能有 0.75 个组成员资格(许多用户不会使用这些组功能,但这样做的人可能是多个组的成员)。此外,所有这些关联的表都将频繁添加,这可能会使物化视图成为不太实用的解决方案。我正在使用 SQL Server 2008。
谢谢,一切顺利,罗伯特
c# - 优化 linq 数据提取所需的帮助
我一次从所有 3 个表中获取数据以避免网络延迟。获取数据非常快,但是当我遍历结果时会花费大量时间
sql - Oracle 的物化视图
我在脚本中有以下行,但我不明白“使用”部分的用途。
我在谷歌上找不到任何东西。有人熟悉吗?
非常感谢 !!
oracle - 具有列聚合的物化视图
这是我在此处发布的另一个问题。请不要关闭为重复,因为它走向另一个方向。
我想用另一列的聚合自动更新数据库列。涉及三个表:
T_RIDER
并T_PONY
通过 建立n:m关系T_RIDER_PONY
。
T_RIDER
并T_PONY
有更多的列,但只有TMP_PONYLIST
在PONY_NAME
这里相关。
TMP_PONYLIST
是一个分号分隔的列表PONY_NAMES
,想象一下"Twisty Tail;Candy Cane;Lucky Leaf"
。无论T_RIDER_PONY
或T_PONY
.
所有应用程序只在视图上工作,从不直接访问表,我需要用物化视图解决这个问题。由于性能原因,物化是绝对要求,并且要求视图在提交时自行更新。
应该像这样创建视图
对于... 我尝试了本文中的以下聚合技术。
- WM_CONCAT -> 在我的 Oracle 中不可用
- 用户定义的聚合 ->
ORA-12054
- ROW_NUMBER 和 SYS_CONNECT_BY_PATH ->
ORA-12054
我还没试过:
- 具体功能
- 使用 Ref 游标的函数泛型函数
- 收集功能
您是否看到任何机会让这些中的任何一个与物化视图一起工作,或者它是否毫无意义。你知道其他可能适用于物化视图的技术吗?
我正在使用 Oracle 数据库 10g 企业版版本 10.2.0.4.0 - 64bi。
oracle - 是否可以在 Oracle 中部分刷新物化视图?
我有一个基于其他物化视图、常规视图以及一些表的非常复杂的 Oracle 视图(我不能“快速刷新”它)。大多数情况下,此视图中的现有记录基于日期并且是“稳定的”,新记录集具有新日期。
有时,我会收到回溯日期。如果我在维护一张桌子,我知道这些是什么以及如何处理它们,但我想保持这个“视图”。完全刷新大约需要 30 分钟,但对于任何给定日期,只需要 25 秒。
我可以指定只更新物化视图的一部分(即受影响的日期)吗?
我是否必须废弃视图并使用表格和过程来填充或刷新该表格中的给定日期?
oracle - 如何判断是否正在使用 Oracle 中的物化视图?
我们的 Oracle 9i 数据库中有一些物化视图,这些视图是很久以前由一个不再在这里工作的人创建的。是否有一种简单(或任何)方法来确定 Oracle 是否使用这些视图来提供查询服务?如果它们不再被使用,我们希望摆脱它们。但是我们不想在这些视图是允许一些随机报告在不到几个小时内运行的事实之后发现。我梦寐以求的答案会是这样的
更棒的是,它可以告诉我哪些实际的 SQL 查询正在使用物化视图。我意识到我可能不得不接受更少。
如果有需要 10g 的解决方案,我们很快就会升级,所以这些答案也会很有用。