是否可以在 MySQL 中有索引视图?

Posted

技术标签:

【中文标题】是否可以在 MySQL 中有索引视图?【英文标题】:Is it possible to have an indexed view in MySQL? 【发布时间】:2008-10-28 18:04:03 【问题描述】:

我找到了a posting on the mysql forums from 2005,但没有比这更近的了。基于此,这是不可能的。但在 3 到 4 年内会有很多变化。

我正在寻找一种在视图上建立索引但让所查看的表保持未索引的方法。索引会影响写入过程,并且此表的写入频率很高(索引会减慢所有内容的爬行速度)。但是,缺少索引让我的查询非常缓慢。

【问题讨论】:

见***.com/q/7922675/632951 【参考方案1】:

我认为 MySQL 不支持您需要的物化视图,但无论如何它在这种情况下对您没有帮助。无论索引是在视图上还是在底层表上,都需要在底层表更新过程中的某个时间点进行写入和更新,因此仍然会导致写入速度问题。

最好的办法可能是创建定期更新的汇总表。

【讨论】:

谢谢。我在物化视图上做了一些搜索,看起来你是对的。【参考方案2】:

您是否考虑过从分析处理数据中抽象出交易处理数据,以便它们都可以专门化以满足其独特的需求?

基本思想是您有一个定期修改的数据版本,这将是事务处理方面,需要大量标准化和少量索引,以便写入操作快速。数据的第二个版本是为分析处理而构建的,并且趋向于标准化程度较低,并且索引较多以用于快速报告操作。

围绕分析处理构建的数据通常围绕数据仓库的立方体方法构建,由表示立方体侧面的事实表和表示立方体边缘的维度表组成。

【讨论】:

这就是我现在正在做的事情。我认为。我将有一个表,其中包含我需要的定期更新的数据,并为查询编制索引,因此我只需每 [long unit of time] 查询一次未索引的表即可更新索引表新数据。【参考方案3】:

Flexviews 通过跟踪对基础表的更改并更新用作物化视图的表来支持 MySQL 中的物化视图。这种方法意味着视图支持的 SQL 有点受限(因为更改日志记录例程必须确定它应该跟踪哪些表的更改),但据我所知,这是您可以在 MySQL 中获得的最接近物化视图的方法.

【讨论】:

【参考方案4】:

您只想要一个索引视图吗?写入只有一个索引的表不太可能具有破坏性。没有主键吗?

如果每条记录都很大,您可以通过弄清楚如何缩短它来提高性能。或者缩短你需要的索引长度。

如果这是一个只写表(即您不需要进行更新),在 MySQL 中开始归档它可能是致命的,或者删除记录(和索引键),需要开始填充索引(重用)来自已删除键的插槽,而不仅仅是附加新的索引值。违反直觉,但在这种情况下,最好使用更大的表。

【讨论】:

以上是关于是否可以在 MySQL 中有索引视图?的主要内容,如果未能解决你的问题,请参考以下文章

查看Oracle的表中有哪些索引

视图的索引字段是不是会提高 MySQL 的性能?

MySQL:基于聚合查询的视图索引

Mysql 索引视图

是否可以在 pandas 数据框中有多个索引?

MySQL高级索引和视图