MySQL视图和索引使用

Xke*_*per 32 mysql view

我正在考虑开始利用视图来降低项目中代码和查询的复杂性 - 其中一些有一些连接,根据我的理解,MySQL视图将允许我们在多个地方更容易地引用这些数据.

有很多东西被抛出,"MySQL不使用视图索引","你不能有索引视图","只有你使用MERGE"......没有明确的答案.

因此,切入追逐:MySQL视图是否使用它们构建的表上的索引?完全使用视图是一个坏主意,因为性能会很糟糕,还是在进行连接时会使用基础表上的索引?如果我按照表中索引的列对视图进行排序,它是否仍然按照通常的速度排序?

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

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

Mar*_*ers 30

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

但是,无法在视图中向计算列添加新索引.我认为这是人们没有索引视图的意思,而不是(例如)SQL Server的索引视图.


Ica*_*rus 16

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

是.

人们可能会在他们说出MySQL doesn't use indexes for views某些内容时materialized views或者indexed views在实际视图上将实际视图物理存储在常规表中的文件系统时引用的内容.可以在某些DBMS(如Oracle或SQL Server)上为这些视图创建索引.基本上,indexed views成为组成它的原始表的副本,并且kept in sync automatically,有点说.

例如,阅读有关SQL Server上的索引视图的这篇文章.