【问题标题】:MySQL Views and index useMySQL 视图和索引使用
【发布时间】:2011-12-16 21:14:10
【问题描述】:

我正在考虑开始使用视图来降低我们项目中代码和查询的复杂性——其中一些有一些连接,据我了解,MySQL 视图可以让我们更轻松地引用这些数据在多个地方。

有很多东西被抛出,其中“MySQL 不为视图使用索引”、“你不能有索引视图”、“只有当你使用 MERGE”......删掉答案。

所以,切入正题:MySQL 视图是否在构建它们的表上使用索引 使用视图是不是一个坏主意,因为性能会很糟糕,还是会在连接时使用基础表上的索引?如果我按表中索引的列对视图进行排序,它的排序速度是否仍像往常一样快?

我的研究似乎表明视图不使用索引,但如果是这样的话,没有人会使用它们;显然人们会这样做,所以...?

对不起,如果这看起来有点荒谬。

【问题讨论】:

标签: mysql view


【解决方案1】:

MySQL 视图是否在构建它们的表上使用索引?

是的。

人们在说MySQL doesn't use indexes for views 时可能指的是称为materialized viewsindexed views 的东西,实际视图在文件系统上物理存储在常规表中。可以在某些 DBMS(例如 Oracle 或 SQL Server)上为这些视图创建索引。从本质上讲,indexed views 成为组成它的原始表格的副本,并且是 kept in sync automatically,可以这么说。

例如,阅读有关 SQL Server 上 Indexed Views 的文章。

【讨论】:

  • 我明白了……我希望我能接受你的两个答案,因为它们都非常非常好。在那一点上,似乎可以通过让基于 INSERT/UPDATE 的触发器基于视图创建一个表(可能吗?)来假装解决方案,但这会对性能造成影响,以至于在一个存档的数据库。
【解决方案2】:

如果您查询视图,MySQL 考虑在基础表上使用索引。

但是,不可能向视图中的计算列添加新索引。我认为这就是人们所说的 MySQL 没有索引视图的意思,而不是(例如)SQL Server's indexed views

【讨论】:

  • 我开始相信情况确实如此,但在我承诺任何事情之前想绝对确定。非常感谢。
猜你喜欢
  • 2010-10-09
  • 2019-04-17
  • 2016-11-18
  • 2011-03-24
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
相关资源
最近更新 更多