从MYSQL表中选择所有字段的性能影响

xuo3flqw  于 2022-10-22  发布在  Mysql
关注(0)|答案(1)|浏览(199)

我在Linux Web服务器上使用PHP和MYSQL,并且通常编程为选择所有匹配的记录字段,即“select*FROM table1 where field1 like query”。在某些情况下(如在生成屏幕索引时),我只使用返回记录中的4或5个字段,这些字段有50个字段。
我想象,如果我想使用49个字段,那么选择所有50个字段是有意义的;但可能有一个点(比率?)其中仅选择所需字段可能更有效。
选择所有字段而不是只选择所需字段是否会影响性能?

mkshixfv

mkshixfv1#

网络速度很快,但不是无限快。在不需要的网络上重复传输字节会带来性能成本。请记住,在典型的应用程序中,您可能每秒多次执行此操作。
假设您的查询请求50列,但您的应用程序仅使用49列。这是2%的开销(假设未使用的列的大小正好是平均值)。如果只需对代码进行一行更改,就可以将查询结果集的网络传输开销减少2%,而且风险很小,您会这样做吗?
如果在SELECT *结果中只使用了一半的列,差异就变得更加重要。或者,如果您不需要的某些列大于平均值,例如长的BLOB/TEXT列。
除了运行时性能之外,避免SELECT *还有其他好处。
例如,如果有人重命名了表中的列,但您的代码仍然使用SELECT *获取所有列,然后按名称引用结果集中的列,您可能会感到困惑,因为您的应用程序不再显示某些数据,或者无法在计算中使用这些数据。这很难调试,或者可能几个月都不被注意。
然而,如果在SQL查询中显式地命名列,并且引用了一个不再具有该名称的列,则在下次运行查询时会收到一条清晰的错误消息。软件设计的一个好原则是“Fail Fast
快速发现错误并及时修复它们有助于提高另一种性能:开发人员性能
我在我的书SQL Antipatterns Volume 1: Avoiding the Pitfalls of Database Programming的一章中提到了使用SELECT *的缺点。

相关问题