我有一个问题,就速度而言,哪种方法更好。 我有一个包含2个表的数据库,如下所示:
表2
UniqueID价格
1 100
2 200
3 300
4 400
5 500
表1
UniqueID用户
1汤姆
2汤姆
3杰里
4杰里
5杰里
我想获得每个用户的最高价格,现在我面临两个选择:
使用Max或使用以下帖子中建议的内部联接:Getting max value from rows and joining to another table
哪种方法更有效?
答案 0 :(得分:1)
您的问题的答案是尝试这两种方法,并查看哪种方法可以更快地处理环境中的数据。除非您拥有大量数据,否则差异可能并不重要。
在这种情况下, if ($packageDb->service_type_id == ServiceType::TYPE_SIP) {
$summary[service_type] = $packageDb->service_type_id;
}
if ($packageDb->service_type_id == ServiceType::TYPE_LANDLINE) {
$summary[service_type] = $packageDb->service_type_id;
}
return View::make("order.order-billing")->with('summary', $summary);
的传统方法可能更好:
@if ($summary['service_type'] == ServiceType::TYPE_SIP)
..
@endif
对于此类查询,您需要group by
上的索引,也可能需要select u.user, max(p.price)
from table1 u join
table2 p
on u.uniqueid = p.uniqueid
group by u.user;
上的索引。这取决于数据库引擎。
我会建议table2(uniqueid, price)
:
table1(uniqueid, user)
join
请注意,这些完全相同的事情。无论如何,第一个将返回每个用户一行。如果有多个行具有相同的价格,则此版本可以返回多行。另一方面,它可以以最高价格返回行中的其他列,这很方便。
因为您的数据结构在子查询中需要not exists
,所以我认为您应该坚持使用select u.user, p.price
from table1 u join
table2 p
on u.uniqueid = p.uniqueid
where not exists (select 1
from table1 u2 join
table2 p2
on u2.uniqueid = p2.uniqueid
where p2.price > p.price
);
方法。