所以我了解了数据库如何从磁盘/SSD中查询数据。默认情况下,数据库以page的形式查询数据。页面可以是任意大小,具体取决于数据库,例如 postgres 是 8kb,因此页面可以包含多行,假设我们每页有 3 行。我的意思是,默认情况下我们将整个数据排成一行,而不仅仅是一列。因此,如果您查询特定列,这是否意味着它必须在返回结果之前过滤不必要的数据,而 select (*) 会获取所有内容,这意味着您不必过滤特定列,您可以直接检索结果。所以我认为 select * 应该比 select column_name 更快,但在现实世界中却并非如此,我想知道为什么。
PS。请不要将其标记为重复我已经阅读了类似的问题,但就我而言有点不同。
读取行存储表中的一列时,伪代码类似于
foreach page in table
foreach row in page
foreach column in selectlist
copy column data to client
因此,客户端请求的列越多,查询读取各个列值并将其发送到客户端的工作量就越多。
此外,如果存在包含该列的索引,则
select column_name
查询可以读取索引而不是表,这可能会减少扫描的数据量。