【问题标题】:How to construct a more complex mysql query for optimization如何构造更复杂的mysql查询进行优化
【发布时间】:2013-07-12 18:18:02
【问题描述】:

我有一段可爱的代码要优化:

$result = mysql_query("select day from cities where name='St Charles'");
$row = mysql_fetch_assoc($result);
$day = $row['day'];

$result = mysql_query("select id,durability from goods_meta_data");

while($row = mysql_fetch_assoc($result)) {
    mysql_query("delete from possessions where day_created<" . ($day-$row[durability]) . " and good_id=" . $row['id']);
}

如果所有权已过期,它会从表 'possessions' 中删除行。所有权是否过期由表“商品”和“城市”中的值确定。 具体来说,商品的使用年限=day-day_created,如果商品的使用期限超过其耐用性,则该商品过期。 (每一种物品都是一种物品,每种物品都有独特的耐久度。)

此代码有效,但我觉得这可以在单个查询中完成。 对 mysql 服务器的延迟特别大,因此在较少的查询中执行此操作会非常有益。

我该怎么做?有什么想法吗?

另外,如果您能向我指出任何有用的资源,我可以从中了解如何以这种方式更好地利用关系数据库,这将很有帮助。

【问题讨论】:

  • 您的第一个查询总是返回一个结果吗?
  • 是的,它总是返回一个结果。

标签: php mysql query-optimization


【解决方案1】:

假设您的第一个查询返回一个结果,那么这应该可以工作:

DELETE p 
FROM possessions p
    INNER JOIN goods_meta_data gmd ON p.good_id = gmd.id
    INNER JOIN cities c ON c.name = 'St Charles'
WHERE p.day_created < c.day - gmd.durability 

【讨论】:

  • @user2581799 -- 没有问题 -- 很高兴它有帮助:D 干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 2012-01-07
相关资源
最近更新 更多