通过简单的逻辑我认为是的,更快,因为DBMS带来的信息更少,内存更少......但是,我没有一个有效的论据,为什么可能更快。
例如,如果我希望从2个相关表中选择,包括索引和所有内容。
但我想知道为什么select tableA.field, tableA.field2, tableA.field3, tableBfield1, tableB,field2 from tableA, tableB
实际上比
更快select * from tableA,tableB
两个表都有大约300万个记录,表A有大约14个字段,tableB有18个。
有什么想法吗?
感谢。
答案 0 :(得分:2)
减少所选字段的数量意味着必须将更少的数据从服务器传输到客户端。它还减少了服务器和客户端用于保存所选数据的内存量。因此,一旦服务器确定哪些行应该在结果集中,这些应该可以提高性能。
它不可能对数据库服务器中处理查询本身的速度产生任何重大影响。这主要取决于加入表的成本,基于SELECT
子句过滤行,以及执行EXPLAIN
子句中指定的任何计算。这些都与所选列无关。如果您对这两个查询使用wget
,则无法看到任何差异。
答案 1 :(得分:1)
您正在加入两个表,每个表有300万行,没有过滤器。这将产生9x10 ^ 12行。生成并向客户端发送几个字段的结果集,对所有32个字段将产生影响。
答案 2 :(得分:0)
如果您选择第一个查询中的所有字段,那就是相同的事情,因为您请求相同数量的数据。请检查此http://sqlfiddle.com/#!9/27987/2
也许性能的差异还有另一个原因......就像......其他选择一样。
基本上从tableA中选择*,tableB相当于两个表的 Cartesian product ,总计300万x3百万行。
因此:
select * from tableA,tableB
使用通配符*,您可以检索一个包含9百万x 28列的表格,而
select tableA.field, tableA.field2, tableA.field3, tableB.field1, tableB.field2 from tableA, tableB
使用显式表格,你有一张9百万x 5列的表......所以数据少了!