0

任务:获取显示 10 个对象,但 1 个特定解决方案除外:

  1. 从 DB 中获取 11 个对象,然后执行类似的操作

    foreach ($products as $product) { if($product->getId() != $specificProduct->getId()){ //display } }

  2. 只需在sql查询中添加条件WHERE p.id != :specific_product_id

一些额外的信息:我们使用 mysql 的学说 2,所以我们必须期待一些额外的水化时间。我进行了一些测试,我对这两种解决方案都进行了计时,但我仍然不知道哪种方式更好。

所以,我的测试得到了一些奇怪的结果(得到 100 个不同参数的查询)

  • php = 0.19614
  • dql = 0.16745
  • php = 0.13542
  • dql = 0.15531

也许有人对我应该如何让我的测试更好有建议

4

3 回答 3

3

如果您担心水合的开销,请记住,在 PHP 代码中执行 != 条件意味着您必须从数据库中获取数千个不相关的、不匹配的行,将它们水合,然后丢弃它们。

只是为了获取所有那些不相关的行而浪费的网络带宽是昂贵的——如果您像许多应用程序一样每秒执行数百次查询,则更是如此。

使用 SQL 表达式消除不需要的行通常要好得多,引用表上的索引支持这些行。

于 2013-10-18T22:59:08.790 回答
1

尽可能使用 SQL。这是您可以使用的基本查询。这丢弃 PHP 中的行要有效得多。

$query = "SELECT * FROM table_name WHERE p.id <> '$specific_id'"
于 2013-10-18T23:02:25.220 回答
0

我认为诸如查询(如基于 id 或索引良好)必须在 sql 端......因为它使用索引,并且向您的应用程序返回更少的数据。处理更少的数据使您的应用程序运行得更快。

于 2013-10-18T23:02:54.133 回答