【问题标题】:Is it bad to run a query knowing that it's going to return null?知道它将返回 null 来运行查询是不是很糟糕?
【发布时间】:2015-11-10 15:41:52
【问题描述】:

我有一个订单实体,在对其执行工作时会经历一些状态。每次请求页面时,后端都会以 JSON 格式返回所有相关数据,这些数据目前可能可用也可能不可用。

基本上,请求的 URL 是相同的,但会根据订单状态切换模板,并且后端始终运行相同的方法来检索数据。根据订单状态,部分数据可能为空。

因此,例如,预购是一种状态,表明该订单尚未最终确定以进行处理。因此,没有进行任何工作。如前所述,假设后端总是运行相同的查询来获取数据。它可能会返回“order_information”、“work_performed”和“cmets”。通常,即使无法在预购订单上执行任何工作,执行获得“work_performed”的查询也会是坏事还是代价高昂?当然,在预购阶段总是会返回 null。提交订单后,最终会有订单数据,这样我就不必在后端编写额外的逻辑。并不是说写起来很麻烦,但是如果没有必要,那么它会使代码更短。

否则,我想我只需要有条件地在后端返回数据。

【问题讨论】:

  • 从技术上讲,不返回 work_performed 所节省的时间/费用可能会被需要运行以决定是否返回 work_performed 的条件语句的时间/费用所抵消。跨度>
  • 是的,我也是这么想的。虽然我没有任何数字来支持这一点。

标签: php mysql optimization


【解决方案1】:

如果结果集中的字段可能为空值,则可以使用 COALESCE

以这三个为例

COALESCE(MAX(bids.gold_bid),0) AS max_bid

在此示例中,如果 bids.gold_bid 的最大值没有值(null),则返回 0 作为 max_bid 的值

COALESCE(bidder.name,'No Bidders') AS highest_bidder

在本例中,如果没有人对该项目出价,则返回“No Bidders”作为出价最高者的姓名

COALESCE(COUNT(bids.gold_bid),0) AS number_of_bids

在此示例中,如果未找到出价(空值),则返回 0 作为出价数

【讨论】:

  • 感谢您的信息。接收 null 并不是什么大问题,但更多的是,即使它不会返回任何内容,运行查询也是一个坏主意吗?这几乎是两种情况:运行所有查询并在适当的情况下返回空值,或者创建条件来确定在流程中的该点运行哪些查询(这意味着那些保证返回空值的查询不会运行)。
猜你喜欢
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 2011-05-23
  • 2011-10-06
  • 2010-11-19
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
相关资源
最近更新 更多