gpt4 book ai didi

sql-server - 全表扫描是否读取所有列(每行)?

转载 作者:行者123 更新时间:2023-12-03 11:17:04 27 4
gpt4 key购买 nike

假设我有一个具有3列的表格-名字,中间名,姓氏-按此顺序..也没有索引,并且所有字段都是varchar。

如果我进行全表扫描以确定表中是否存在给定的名字,那么Oracle(或MSSQL)是否也必须通读所有其他列? (或者跳过它们足够聪明吗?)。

如果我正在搜索第二列而不是第一列怎么办?第一列是否必须阅读?如果第一列是具有接近2000bytes数据的varchar,该怎么办? ..是否必须读取所有字节,还是以某种方式跳过它们?

最佳答案

对于程序员而言,“读取”的定义可能是“将查看内存地址并读取每个字节”,但是对于数据库,此定义是不正确的。在数据库中,“读取”表示“访问磁盘并获取内存中的数据”。由于Oracle和SQL Server都是面向页面的行存储,因此可以,所有列都将被“读取”。一旦考虑off-row storage等,事情就会变得复杂,而如果考虑buffer pool,事情就会变得非常混乱。但是对于这种详细程度,您需要更详细地表达问题(您要达到的目的以及为什么要问?),并且还需要非常详细地了解存储格式。

附带说明一下,SQL Server和Oracle均支持columnstore格式,该格式明确设计用于以面向列的方式读取(即,不需要读取不需要的列),但是这不太可能是您想要的,而列存储是一个非常非常特殊的情况

关于sql-server - 全表扫描是否读取所有列(每行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10034391/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com