【问题标题】:Improving SQL cartesian product performance by reducing columns通过减少列来提高 SQL 笛卡尔积性能
【发布时间】:2015-10-07 02:18:01
【问题描述】:

我有一个 SQL 查询,它在一张大表上使用笛卡尔积。但是,我只需要其中一张表中的一列。如果我在使用笛卡尔积之前只选择那一列,它实际上会表现更好吗?

那么,换句话说,会是这样吗:

SELECT A.Id, B.Id
FROM (SELECT Id FROM Table1) AS A , Table2 AS B;

比这更快,因为 Table1 的列比 Id 多?:

SELECT A.Id, B.Id
FROM Table1 AS A , Table2 AS B;

还是说列数不重要?

【问题讨论】:

    标签: sql database performance cartesian-product


    【解决方案1】:

    在大多数数据库上,这两个表单具有相同的执行计划。

    在实现子查询的数据库(例如 MySQL)上,第一个可能会更糟。

    第二个应该更好,在两个表上都有索引。 . . table1(id)table2(id)。索引将用于获取值而不是基础数据。

    【讨论】:

      【解决方案2】:

      自己试试吧!但一般来说,让子查询减少行数将有助于提高性能。但是,您的查询应该以不同的方式编写:

      select a.id aid, b.id bid from
      (Select id from table1 where id=<specific_id>) a, table2 b
      

      【讨论】:

      • 我真的很抱歉,我混淆了列和行(现在更正了)。我的意思只是减少列,而不是行。
      • 在这种情况下,我选择 Gordon:您使用哪种形式可能不会有任何区别,因为您不会输出所有列。
      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多