与执行“SELECT *”相比,从SQL语句中选择特定值是否可以提高效率

时间:2011-09-13 13:49:53

标签: mysql sql

这个问题刚出现在我脑海中,我无法回答它。

假设您正在为网站开发新闻页面。在您的表格中,您将拥有以下字段:

  

ID,标题,主题,内容,时间,作者,关键字

在用户将看到的实际页面上,您可能只想显示以下内容:

  

标题,内容,关键字

现在,当你去编写SQL语句时,最好把它写成:

SELECT Title, Content, Keywords FROM newstable;

或者这样:

SELECT * FROM newstable;

我一直认为使用前一个例子会更有效,更快捷地使用。但是,我现在认为使用select all语句可能更快更容易。

是正确的方式,还是它们的编写方式真的很重要?

4 个答案:

答案 0 :(得分:13)

是的,这对性能和其他原因很重要。

  • 如果仅选择所需的列,则必须返回较少的数据。这意味着更少的时间将其从硬盘驱动器上拉下来并通过电线发送。
  • 使用covering index可能会完全满足您选择的列,这可以使查询速度提高很多次
  • 通过指定列名称,您将记录您在代码中使用的数据。当您回来进行维护时,这非常有用。
  • 如果不使用*,则在重命名,添加或删除列时,您不会遇到代码中断的可能性。如果你明确列名,你将得到一个查询执行时错误,而不是盲目传递给你的代码的新结果,谁知道会发生什么。

答案 1 :(得分:4)

我建议最佳做法是明确写出列。

首先,这将最大限度地减少返回的数据量。

接下来,如果有人向数据库添加了一列,它会删除可能的回归错误。

此外,它不会花费太多时间。

最后,你几乎肯定会有一个order by子句,这只能通过索引中的数据来满足。

答案 2 :(得分:3)

除了性能原因(返回的结果集较小以及仅索引检索的可能性)之外,将指定顺序的已知数量的命名列返回到应用程序代码会使代码更加健壮 - 您不可能意外地编码对表的当前定义的任何依赖。

答案 3 :(得分:1)

是的,这对性能很重要。此外,可读性更好,然后您确切地知道您要求的数据。

您应该指定所需的数据列,如果您不需要它们,那么为什么要拉它们。您只需返回不必要的数据