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

时间:2008-10-28 18:04:04

标签: sql mysql views materialized-views indexed-view

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

我正在寻找的是一种在视图上拥有索引但让查看的表保持未编入索引的方法。索引会损害写入过程,并且会经常写入此表(直到索引将所有内容减慢到爬行的程度)。但是,缺少索引会使我的查询变得非常缓慢。

4 个答案:

答案 0 :(得分:29)

我认为MySQL并不支持您需要的物化视图,但无论如何它都无法帮助您。无论索引是在视图上还是在基础表上,它都需要在更新基础表的过程中的某个时刻进行编写和更新,因此仍然会导致写入速度问题。

您最好的选择可能是创建定期更新的汇总表。

答案 1 :(得分:7)

您是否考虑过从分析处理数据中提取交易处理数据,以便它们都可以专门用于满足其独特要求?

基本思想是你有一个经常修改的数据版本,这将是事务处理方面,需要大量的规范化和轻量级索引,以便写入操作很快。数据的第二个版本是为分析处理而构建的,并且往往不那么标准化,并且对于快速报告操作而言索引更多。

围绕分析处理构建的数据通常围绕数据仓库的多维数据集方法构建,由表示多维数据集边的事实表和表示多维数据集边的维表组成。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

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