为什么 select column_name 比 select * 快?

问题描述 投票:0回答:1

所以我了解了数据库如何从磁盘/SSD中查询数据。默认情况下,数据库以page的形式查询数据。页面可以是任意大小,具体取决于数据库,例如 postgres 是 8kb,因此页面可以包含多行,假设我们每页有 3 行。我的意思是,默认情况下我们将整个数据排成一行,而不仅仅是一列。因此,如果您查询特定列,这是否意味着它必须在返回结果之前过滤不必要的数据,而 select (*) 会获取所有内容,这意味着您不必过滤特定列,您可以直接检索结果。所以我认为 select * 应该比 select column_name 更快,但在现实世界中却并非如此,我想知道为什么。

PS。请不要将其标记为重复我已经阅读了类似的问题,但就我而言有点不同。

database b-tree
1个回答
0
投票

读取行存储表中的一列时,伪代码类似于

foreach page in table
   foreach row in page
      foreach column in selectlist
         copy column data to client

因此,客户端请求的列越多,查询读取各个列值并将其发送到客户端的工作量就越多。

此外,如果存在包含该列的索引,则

select column_name
查询可以读取索引而不是表,这可能会减少扫描的数据量。

© www.soinside.com 2019 - 2024. All rights reserved.