通过在查询中仅选择必需字段而不是查询整行,可以获得多少性能优势?例如,如果我有一行10个字段但在显示中只需要5个字段,那么仅查询那些5个字段是否值得?这个限制的性能优势是什么?如果需要,以后必须返回并在sql查询中添加字段的风险是什么?

有帮助吗?

解决方案

您需要考虑的不仅仅是额外的数据方面。选择所有列将否定覆盖索引的有用性,因为将需要对聚簇索引(或表)进行书签查找。

其他提示

这取决于选择了多少行,以及这些额外字段消耗了多少内存。如果例如存在多个text / blobs字段,或者选择了许多行,则运行速度会慢得多。

以后如何添加字段会带来风险?修改查询以适应不断变化的需求是开发过程的一个自然部分。

我知道在select语句中显式命名列的唯一好处是,如果您的代码使用的列被重命名,则select语句将在您的代码之前失败。如果你的select语句在proc中,那么你的proc和DB脚本将无法编译。如果您使用VS DB edition之类的工具来编译/验证数据库脚本,这非常方便。 否则,性能差异可以忽略不计。

检索的字段数对性能的二阶影响相对于SQL请求本身的大量开销 - 从进程外,通过网络到另一个主机,可能到该主机上的磁盘需要更多周期而不是铲除一些额外的数据字节。

显然,如果额外的字段包含一个兆字节的blob,则该等式是倾斜的。但我的经验是,事务开销与实际检索的数据的顺序相同或更大。我多年前隐约记得,而不是“空”。 NOP TNS请求大约有100个字节。

如果SQL服务器不是您要查询的同一台计算机,那么选择额外的列会通过网络传输更多数据(这可能是瓶颈),不要忘记它必须从磁盘读取更多数据,分配更多的内存来保存结果。

没有一件事本身会导致问题,但是添加内容会导致性能问题。当你有很多查询或数据时,每一点都有帮助。

我想风险是你必须稍后将字段添加到查询中,这可能意味着更改代码,但是你通常必须添加更多代码来处理额外的字段。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top