Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 全表扫描是否读取所有列(每行)?_Sql Server_Oracle - Fatal编程技术网

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

Sql server 全表扫描是否读取所有列(每行)?,sql-server,oracle,Sql Server,Oracle,假设我有一个表,表中有3列——firstname、middlename、lastname——按顺序排列。。也没有索引,所有字段都是varchar 如果我执行完整的表扫描以确定表中是否存在给定的名字。。Oracle(或MSSQL)是否也必须通读所有其他列?(或者跳过它们够聪明吗?) 如果我搜索的是第二列而不是第一列呢?必须阅读第一列吗?如果第1列是数据量接近2000字节的varchar呢。。是否必须读取所有字节,还是以某种方式跳过这些字节?数据页中的所有数据都将被读取,除非它未被查询并存储在绑定之

假设我有一个表,表中有3列——firstname、middlename、lastname——按顺序排列。。也没有索引,所有字段都是varchar

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


如果我搜索的是第二列而不是第一列呢?必须阅读第一列吗?如果第1列是数据量接近2000字节的varchar呢。。是否必须读取所有字节,还是以某种方式跳过这些字节?

数据页中的所有数据都将被读取,除非它未被查询并存储在绑定之外。当varchar(max)列超过8k数据时,它将在一组新页面中继续。不查询字段时不会读取这些页面。

对于程序员来说,“读取”的定义可能是“将查看内存地址并读取每个字节”,但对于数据库来说,此定义是不正确的。在数据库中,“读取”是指“访问磁盘并获取内存中的数据”。由于Oracle和SQL Server都是面向页面的行存储,因此是,所有列都将被“读取”。一旦你想到了,事情就会变得复杂起来,如果你考虑的话,事情会变得非常混乱。但是,对于这一级别的详细信息,您需要更详细地表达问题(您想要实现什么,为什么要问?),并且您还需要非常详细地了解存储格式

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