代码之家  ›  专栏  ›  技术社区  ›  AticusFinch

简易SQL查询性能问题

sql
  •  1
  • AticusFinch  · 技术社区  · 15 年前

    在设计SQL查询(更快)时,选择整行(select*)还是只选择所需的字段?如果结果被送入另一个查询(如自然联接)会怎么样?

    5 回复  |  直到 15 年前
        1
  •  7
  •   Gary McGill    15 年前

    只选择您需要的字段通常会更快——尤其是如果这些字段被索引“覆盖”,那么数据库只需要从索引加载数据,而不需要从主表加载数据(这样可以使它获取的页面更少)。

        2
  •  3
  •   Adriaan Stander    15 年前

    选择只需要更快的速度,这适用于列和where子句。

        3
  •  1
  •   Kristen    15 年前

    将来添加列时,select*尤其危险。假设您有一个需要用户名和上次登录日期的例程。最后,将一个用户注释文本列添加到表中,然后单击!这个小程序现在也将拉一些(potentailly vaste)文本数据,整个应用程序的性能将恶化,整个应用程序中的每个select语句都需要修复才能解决问题!

    只需选择应用程序需要的列:)

        4
  •  0
  •   Wael Dalloul    15 年前

    选择您需要的字段更快,因为它带来的数据更少。这是提高查询性能速度的一般建议。

        5
  •  -2
  •   Erich Kitzmueller    15 年前

    如果您多次访问表,并且具有更多硬解析的开销大于选择更多列的开销,那么选择所有列可能会更快。

    例如,假设您有一个表foobar,其中包含列a..c,所有列都是char(1);然后是以下语句序列

    SELECT a,b,c FROM foobar;
    SELECT a,b FROM foobar;
    SELECT a,c FROM foobar;
    SELECT a FROM foobar;
    SELECT b,c FROM foobar;
    SELECT b FROM foobar;
    SELECT c FROM foobar;
    

    可能比执行慢

    SELECT * FROM foobar;
    

    七次。