gpt4 book ai didi

mysql - 通过连接两个表创建的 View 是否读取未查询/未使用的列?

转载 作者:行者123 更新时间:2023-11-29 00:37:58 24 4
gpt4 key购买 nike

关于这个过度简化的例子:

在这个数据库方案中

+--------------+  +-------------------+
| MASTER_TABLE | | FILES_TABLE |
+-----+--------+ +-----+------+------+
| nID | field | | nID | meta | BLOB |
+-----+--------+ +-----+------+------+
| 1 | ... | | 1 | ... | ... |
+-----+--------+ +-----+------+------+

如果我创建这样的 View :

CREATE VIEW myView AS
SELECT master.*, file.meta
FROM master_table master
LEFT JOIN files_table file
USING (nid)

在查询 myView 时是否读取未使用的列 BLOB?(读作:查询 View 比仅查询 master_table 会慢得多吗)

我问这个是因为 BLOB 列将用于存储文件。我们一开始将表一分为二的原因是为了加快master_table的查询速度。


免责声明:

在设计数据结构时,项目经理决定将附加到数据的文件存储在数据库中,而不是文件系统中。

我非常清楚关于在数据库中存储文件还是在文件系统中存储文件的众多激烈讨论,但正如我所说,这不是我决定的,我也无权改变决定。

最佳答案

不,只有构建 View 的查询所需的选择中列出的字段是“读取”的。但是,任何连接都会影响选择时间,而不仅仅是单个表选择语句。

因为您没有在 View 中使用 blob 字段,所以您不会接受这个命中。

如果 nidmasterfile 表中都被索引,性能应该相当好。

如果您在 file 表上有 (nid, meta) 的复合索引,则此 View 的 JOIN 的最佳性能。这假设元数据不是太大而不能成为复合索引的一部分。

关于mysql - 通过连接两个表创建的 View 是否读取未查询/未使用的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482024/

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