MySQL视图和索引使用

时间:2011-10-27 21:31:39

标签: mysql view

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

有很多东西被抛出,“MySQL不使用视图索引”,“你不能有索引视图”,“只有你使用MERGE”......没有明确的 - 切回答。

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

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

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

2 个答案:

答案 0 :(得分:30)

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

但是, 我认为这是人们对MySQL没有索引视图的意思,而不是(例如)SQL Server's indexed views

答案 1 :(得分:16)

  

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的文章。