当我调用mysql中带有where的视图时会发生什么

bvn4nwqk  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(250)

我有两个问题:
首先,如果我在mysql中有一个简单的视图,如下所示:

CREATE VIEW `peopleView` AS
SELECT id, name, surname FROM people

然后我执行以下查询:

SELECT * FROM peopleView WHERE id = 5

mysql服务器是否在后台创建类似的内容?

SELECT id, name, surname FROM people WHERE id = 5

换句话说,它不首先执行视图,它可能返回5000条记录,然后在这5000条记录上尝试过滤到id=5的位置?这会让景色变得很慢。。。
其次,我认为视图没有索引。所以即使 surname 被编入索引,我执行

SELECT * FROM peopleView WHERE surname = 'Smith'

查询是否仍然需要遍历每个记录才能找到所有的“smiths”,即使 Surname 是索引的,因为视图丢失了所有索引?主键也一样吗?如果 id 是主键吗

SELECT * FROM peopleView WHERE id = 563

必须遍历所有记录 id 是主键并已索引,因为索引在视图中丢失?
谢谢

r1wp621o

r1wp621o1#

它如何在内部处理它取决于各种因素,有些是有记录的,有些是神秘的,但实际上是一个复杂的过程 VIEW 就像一个宏。视图通常没有索引,但它们可以使用各自表上的索引。
如果/当mysql支持“物化视图”(类似于预计算视图)时,情况会发生很大变化。
有些平台实际上允许您 INSERT 变成一个 VIEW 如果最后的陈述有意义的话。
记得吗 EXPLAIN SELECT ... 可以告诉您mysql是如何理解您的查询的,并向您展示它将如何运行它。

相关问题