【发布时间】:2011-03-11 22:58:40
【问题描述】:
如果我只需要 2/3 列并且我查询 SELECT * 而不是在选择查询中提供这些列,是否存在与更多/更少 I/O 或内存有关的性能下降?
如果我在不需要的情况下选择 *,则可能会出现网络开销。
但是在选择操作中,数据库引擎是否总是从磁盘中提取原子元组,还是仅提取选择操作中请求的那些列?
如果它总是拉一个元组,那么 I/O 开销是相同的。
同时,如果从元组中提取出请求的列,则可能会消耗内存。
所以如果是这样的话,select someColumn 会比 select * 有更多的内存开销
【问题讨论】:
-
是否有您要询问的特定 RDBMS?
SELECT查询的执行/处理方式可能因数据库而异。 -
顺便说一句,在 PostgreSQL 中,如果您说
CREATE VIEW foo_view AS SELECT * FROM foo;,然后稍后将列添加到表 foo,这些列将不会按预期自动显示在 foo_view 中。换句话说,此上下文中的*仅扩展一次(在视图创建时),而不是每个 SELECT。由于 ALTER TABLE 引起的并发症,我想说(在实践中)*被认为是有害的。 -
@JoeyAdams - 不仅仅是 PostgresQL,这也是 Oracle 的行为。
-
@OMG Ponies:我不知道有类似的帖子。然而,这些并不相似。 @Lèse majesté:我说的是通用 RDBMS。不是关于任何特定的供应商@Joey Adams:嗯,我知道 * 是不安全的。只是想讨论有关的性能问题。
标签: sql performance