增加列数会影响'SELECT'语句吗?

时间:2017-06-25 07:28:18

标签: sql-server

我有一个包含许多列的表,我不需要在我的应用程序的每个屏幕中检索所有这些列,因此我将select语句用于我需要的唯一列。

我的问题是关于搜索技术:数据库引擎是否只处理我请求的列,还是在执行查询时会考虑其他列?

我的意思是如果我有一个包含100列的表,当我只有SELECT个特定列时,那么数据库引擎会在选择所有列时花费相同的时间吗?

1 个答案:

答案 0 :(得分:1)

基本上有两个部分需要考虑。

首先,数据是如何在磁盘上撒谎的。 smallest unit of data read generally is a page,包含一行或多行。添加列每行需要更多存储空间,因此检索包含更多列的记录将需要存储引擎读取更多页面,从而产生更多磁盘I / O.

如果您选择的列在索引中,则可以从索引中获取row data may not even have to be read作为列的数据。

然后有缓存。给定一个固定大小的内存缓存,如果你有更多列,那么更少的行将适合那里,因此通过添加更多列,你可以从缓存中准备好更少的数据。

其次是网络流量,受所请求列的影响。 SELECT *必须将所有行数据打包成网络数据包,而选择特定列只会传输这些列的数据。

每行更多的网络流量意味着您的应用程序每秒下载的行数更少。

简而言之:only select the columns you're going to need,并考虑在适当的时候在索引中包含相关列。