我正在考虑开始利用视图来降低项目中代码和查询的复杂性 - 其中一些有一些连接,根据我的理解,MySQL视图将允许我们更容易地引用该数据在多个地方。
有很多东西被抛出,“MySQL不使用视图索引”,“你不能有索引视图”,“只有你使用MERGE”......没有明确的 - 切回答。
所以,切入追逐: MySQL视图是否在构建的表上使用索引?根本不使用视图是一个坏主意是不是很糟糕,还是会在进行连接时使用基础表上的索引?如果我按照表中索引的列对视图进行排序,它是否仍然按照通常的速度排序?
进行我的研究似乎表明视图不使用索引,但如果是这样的话,没有人会使用它们;显然人们这么做,所以......?
对不起,如果这看起来有点荒谬。
答案 0 :(得分:30)
如果查询视图,MySQL 将考虑在基础表上使用索引。
但是, 我认为这是人们对MySQL没有索引视图的意思,而不是(例如)SQL Server's indexed views。
答案 1 :(得分: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上Indexed Views的文章。