从存储过程中查询视图还是在存储过程中包含 table 连接更有效?

Is it more efficient to query a view from a stored procedure or include the table join in the stored procedure?

我在 MySQL 中有一个类似于 Instagram 的数据库结构,其中我有一个 table 包含文件系统中图片的路径和一个 table 包含这样的用户信息:

用户:

ID | userName  | age | gender
---|-----------|-----|-------
 1 | MrBanana  | 15  |   0   
 2 | BobTheMan | 21  |   0   
 3 |  TheBest  | 19  |   1
 4 |   MsTest  | 24  |   1      

图片:

ID |   Path    | userID 
---|-----------|--------
 1 | www.test1 |    2    
 2 | www.test2 |    4       
 3 | www.test3 |    3    
 4 | www.test4 |    2 

现在的要求是每次调出图片都要包含userName和ID。所以我的第一个想法是创建一个连接两个 table 的视图,这样一张图片现在也有用户名和附加到它的图像的 ID,然后从该视图中查询图片。查询将放在存储过程中。现在我的问题是,这是否有效,或者是否更有效地进行查询并加入一个雄蕊并将其放入存储过程?

我担心的是,如果我使用视图方法,每次它查询视图时都必须首先加入两个 table 的整体,如果这些 table 变得非常大,这将是一个非常耗时的过程。因此,如果我创建一个存储过程,首先找到所有需要的图片,然后将用户加入其中,效率会更高。

我不确定我是否理解正确,想寻求帮助,了解哪种方法更好,扩展更有效?

不确定您使用的是哪个 RDBMS,但根据我使用 SQL 服务器的经验(我猜其他供应商也这样做),普通视图会使用索引 视图查询中包含的 table 就好像您在视图外执行该查询一样。

因此,如果您担心在查询 ID=3 的图片时,您的 vwPicturesWithUser 是否会使用图片的索引 table,答案是肯定的(嗯,我想有人会想出一些奇怪的场景,查询规划器决定忽略索引,但在没有视图的情况下查询也会发生这种情况。