我在Linux网络服务器上使用PHP和MYSQL,并且通常编程选择所有匹配的记录字段 - 即' SELECT * FROM table1 where field1 like query'。在某些情况下(如在制作屏幕索引时),我只使用返回记录中包含50个字段的4或5个字段。
我想如果我想使用49个字段,那么选择所有50个字段是有意义的;但是可能有一点(比率?),只选择所需的字段可能会更有效。
是否存在性能影响选择所有字段而不是仅选择所需的字段?
答案 0 :(得分:0)
网络速度很快,但它们并非无限快。在您不需要的网络上重复传输字节会产生性能成本。请记住,您可能在典型应用程序中每秒执行此操作
。假设您的查询请求50列但您的应用仅使用49.这是2%的开销(假设未使用的列的大小完全是平均值)。如果您可以通过对代码进行单行更改来减少查询结果集的网络传输开销2%,风险很小,那么您会这样做吗?
如果您只使用SELECT *
结果中的一半列,则差异变得更加重要。或者,如果您不需要的某些列大于平均值,例如长BLOB / TEXT列。
除了运行时性能之外,还有其他好处可以避免SELECT *
。
例如,如果有人重命名表中的列,但您的代码仍然使用SELECT *
获取所有列,然后按名称引用结果集中的列,则可能会混淆您的应用程序不再显示一些数据,或未能在计算中使用数据。这很难调试,或者可能几个月没有被注意到。
如果您在SQL查询中明确命名列,并引用不再具有该名称的列,则在下次运行查询时,您将收到明确的错误消息。软件设计的一个好原则是" Fail Fast。"
快速查找错误并及时修复它们有助于提高其他类型的性能:开发人员性能。
我在我的书SQL Antipatterns: Avoiding the Pitfalls of Database Programming的一章中写到了使用SELECT *
的不足之处。