1

关于这个过于简单的例子:

在这个数据库方案中

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

如果我创建这样的视图:

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

查询时是否会读取未使用的 BLOB 列myView(读作:查询视图会比只查询master_table慢得多)

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


免责声明:

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

我很清楚关于将文件存储在数据库与文件系统中的大量激烈讨论,但正如我所说,这不是我决定的,我也无权改变决定。

4

1 回答 1

1

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

由于您没有在视图中使用 blob 字段,因此您不会受到此打击。

如果在表和表nid中都有索引,性能应该是相当不错的。masterfile

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

于 2012-11-20T21:00:40.687 回答