gpt4 book ai didi

mysql - 当我使用 WHERE 调用 MySQL 中的 View 时会发生什么

转载 作者:行者123 更新时间:2023-11-29 06:40:55 25 4
gpt4 key购买 nike

我有两个问题:

首先,如果我在 MySQL 中有一个简单的 View ,如下所示:

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 条记录的 View ,然后在这 5000 条记录上尝试过滤到 WHERE id = 5?这会让 View 变得非常慢......

其次,我相信 View 没有索引。因此,即使 surname 被索引,我也会执行

SELECT * FROM peopleView WHERE surname = 'Smith'

即使 Surname 已建立索引,查询是否仍然需要遍历每条记录才能找到所有“Smiths”,因为 View 会丢失所有索引?和主键一样吗?如果 id 是主键,则

SELECT * FROM peopleView WHERE id = 563

即使id是主键并且已建立索引,也必须遍历所有记录,因为索引会在 View 中丢失?

谢谢

最佳答案

它如何在内部处理它取决于多种因素,有些是有记录的,有些是神秘的,但实际上 VIEW 的行为就像一个宏。 View 通常没有索引,但它们可以利用各自表上的索引。

如果/当 MySQL 支持“物化 View ”(类似于预先计算的 View )时,情况会发生很大变化。

如果生成的语句有意义,某些平台实际上允许您INSERTVIEW中。

请记住,EXPLAIN SELECT ... 可以告诉您 MySQL 如何理解您的查询,并向您展示它将如何运行它。

关于mysql - 当我使用 WHERE 调用 MySQL 中的 View 时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51649044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com