使用“SELECT Field1,Field2,Field3 ......”代替“SELECT * ...”可以获得性能提升吗?

时间:2010-07-06 06:13:25

标签: sql performance

使用以下方式是否实现了性能提升:

SELECT Field1, Field2, Field3 ... 

而不是:

SELECT * ...

5 个答案:

答案 0 :(得分:4)

是的,有。它主要是通过选择较少的列来节省IO和网络流量。这可能非常重要,因为在客户端上花费的大部分时间来自数据库服务器上的网络和磁盘IO。当然,这假设您选择的列数少于表格中的列数。

通常,您应该只选择要使用的字段。

这是一种很好的做法,因为您还要确保您的查询不会受到将来对表的更改(添加列)的影响。

答案 1 :(得分:4)

如果列表field1,.....表示可用列的子集,则答案为是。更有效率取决于子集的小多少。

对于每个处理的行,根据列类型有多个“每列”操作,这可以是将字节重新组合为整数边界或者分配合适的内存块和大量读取的重量另一个文件中的BLOB。

然而,即使很少或没有性能优势,大多数经验丰富的程序员也会始终编写特定列列表。有几个原因,最重要的是它有助于使您的程序与数据库架构的更改隔离 - 您的程序不会在某人添加或重新排序列中爆炸,其次是您不需要继续回到数据库的可读性schema用于查看程序从表中获取的内容,第三,它可以帮助进行影响分析,因为您可以扫描源代码以使用特定列。

答案 2 :(得分:1)

另一个性能问题是如果您在视图中执行此操作。如果在视图中放置select *,这将影响可以对视图执行的索引,强制它们重新扫描表以查找要选择的列的列表。

这是一个q / a,也提到了这一点 http://bytes.com/topic/sql-server/answers/480715-select-views

答案 3 :(得分:0)

我个人的经验是,肉眼看不到任何性能差异。但是你仍然应该指定你想要的列而不是*(除了像COUNT(*)之类的东西),因为如果表的定义发生变化,你不太可能以意想不到的方式失败。

答案 4 :(得分:0)

使用Microsoft Access时,如果指定字段名称而不是“*”,则查询速度会变慢 - 但对于许多知名数据库服务器而言,即使输出中的字段数相同,性能也会更好。所以这取决于您选择的数据库。