代码之家  ›  专栏  ›  技术社区  ›  Thomas Owens

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

  •  30
  • Thomas Owens  · 技术社区  · 16 年前

    我发现 a posting on the MySQL forums from 2005 但是没有比这更新的了。基于此,这是不可能的。但在3-4年内会有很多变化。

    我要寻找的是一种在视图上建立索引的方法,但是让被查看的表保持未建立索引。索引会损害写入过程,并且此表被频繁地写入(到索引会使所有操作都变慢到爬行的程度)。但是,由于缺少索引,查询速度非常慢。

    4 回复  |  直到 11 年前
        1
  •  29
  •   KernelM    16 年前

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

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

        2
  •  7
  •   Noah Goodrich    16 年前

    您是否考虑从分析处理数据中提取您的事务处理数据,以便它们都能专门化以满足它们的独特需求?

    基本思想是,您有一个定期修改的数据版本,这将是事务处理方面,需要大量的规范化和较轻的索引,以便快速执行写操作。第二个版本的数据是为分析处理而构建的,为了实现快速的报告操作,这些数据往往不那么规范化,索引也更重。

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

        3
  •  2
  •   mateusz.kijowski    11 年前

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

        4
  •  0
  •   dkretz    16 年前

    是否只需要一个索引视图?写一个只有一个索引的表不太可能有那么大的破坏性。是否没有主键?

    如果每个记录都很大,您可以通过找出缩短记录的方法来提高性能。或者缩短所需索引的长度。

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