代码之家  ›  专栏  ›  技术社区  ›  Spencer Ruport

SQL视图是否保留性能方面的关系信息?

  •  0
  • Spencer Ruport  · 技术社区  · 17 年前

    考虑这些表格: ->

    USER (userid, username, imageid->IMAGE.imageid)
    EVENT (eventid, userid->USER.userid, description)
    IMAGE (imageid, location)
    

    假设我有一个观点(让我们称之为 vw_UserInfo )定义为以下查询。

    SELECT u.*, i.* FROM users u
    INNER JOIN images i ON i.imageid = u.imageid
    

    SQL是否知道 EVENT.userid vw_UserInfo.userid ? 我的意思是,一个 JOIN 对相关字段的操作是否仍然适用?我想这可能会因您使用的SQL DB而异。


    编辑:为了更清楚一点。我在问威尔

    SELECT ui.*, e.* FROM vw_UserInfo ui 
    INNER JOIN events e ON ui.userid = e.userid
    

    从定义的外键中获得的好处与

    SELECT u.*, i.*, e.* FROM users u
    INNER JOIN images i ON i.imageid = u.imageid
    INNER JOIN events e ON e.userid = u.userid
    

    3 回复  |  直到 17 年前
        1
  •  2
  •   Cade Roux    17 年前

    不,因为视图(至少在SQL Server中)实际上不是约束系统的一部分(视图的存在或不存在不应影响任何未引用该视图的查询的性能)。但是,索引视图(物化视图)可能有助于提高性能。但是,如果没有显式引用,我不确定哪一个优化器(如果有的话)会在执行计划中使用它们。

    如果你读 this article by Celko ,您可以看到,向数据库提供的有关表之间的约束和外键关系的元数据越多,这可以提高查询的性能。

        2
  •  0
  •   Robert C. Barth    17 年前

        3
  •  0
  •   Allain Lalonde    17 年前

    是的,有点。

    但是正如罗维特所说,关系不会加速查询,索引会。