使用*与字段名称列表的SELECT语句性能

时间:2010-02-09 20:58:53

标签: mysql

  

可能重复:
  Which is faster/best? SELECT * or SELECT column1, colum2, column3, etc.

在我正在阅读的一些代码中,所有SELECT语句都使用了一个字段名列表,其中选择了表中的所有字段。例如,使用名为Book and fields Author,PublishDate,Pages和Price的表,select语句如下所示:

SELECT Author, PublishDate, Pages, Price FROM Book;

应用程序中的所有选择语句都是这样的,这让我想知道这样做的性能是否会提高:

SELECT * FROM Book;

我浏览了一本MySql书,但没有看到任何与此相关的内容。考虑到每次添加字段时更改SELECT语句的维护开销,我想知道将更改为更短的语法。这会引入性能问题吗?这可能与安全有关吗?

2 个答案:

答案 0 :(得分:1)

对性能几乎没有影响,但对代码的可读性和可扩展性影响很大。你也可以向sql server发送更多数据,因为与单个字符相比,名称占用的空间要多得多。

答案 1 :(得分:1)

作为编程的一般规则,显式几乎总是最佳实践。

选择*在维护方面并没有真正为您节省太多,因为在大多数情况下必须更新使用该查询的代码。

如果您编写的代码只是盲目地操作特定表中的任何字段,那么您就会遇到麻烦。例如,将某种维护列添加到表格中的DBA(如时间戳)不会认为它会突然显示在您的应用程序中。确保您的应用面向未来的最佳方式是明确。

此外,不要忘记通过拖动您不会使用的数据列来减少客户端 - 服务器体系结构中的带宽成本。

我在前一段时间写的这篇短文中对使用select *的性能影响进行了更彻底的处理: "Don't Use Select *"