通过减少列提高 SQL 笛卡尔积性能
Improving SQL cartesian product performance by reducing columns
我有一个 SQL 查询,它在大型 table 上使用笛卡尔积。但是,我只需要 table 之一的一列。如果我在使用笛卡尔积之前只选择那一列,它实际上会表现得更好吗?
所以,换句话说,这会是:
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;
或者列数无关紧要?
在大多数数据库中,这两种形式具有相同的执行计划。
第一个在实现子查询的数据库(例如MySQL)上可能会更糟。
第二个在两个表上都有索引应该更好。 . . table1(id)
和 table2(id)
。索引将用于获取值而不是基础数据。
亲自尝试一下!但一般来说,子查询减少行数将有助于提高性能。但是,您的查询应该以不同的方式编写:
select a.id aid, b.id bid from
(Select id from table1 where id=<specific_id>) a, table2 b
我有一个 SQL 查询,它在大型 table 上使用笛卡尔积。但是,我只需要 table 之一的一列。如果我在使用笛卡尔积之前只选择那一列,它实际上会表现得更好吗?
所以,换句话说,这会是:
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;
或者列数无关紧要?
在大多数数据库中,这两种形式具有相同的执行计划。
第一个在实现子查询的数据库(例如MySQL)上可能会更糟。
第二个在两个表上都有索引应该更好。 . . table1(id)
和 table2(id)
。索引将用于获取值而不是基础数据。
亲自尝试一下!但一般来说,子查询减少行数将有助于提高性能。但是,您的查询应该以不同的方式编写:
select a.id aid, b.id bid from
(Select id from table1 where id=<specific_id>) a, table2 b