English 中文(简体)
MYSQL选择哪一种方法?
原标题:Which MYSQL select method?
  • 时间:2009-10-14 16:56:00
  •  标签:

我有3个表格。

1st -> products 2nd -> labels 3rd -> connectionTable

我想选择所有贴标签的产品。 我有两种方法。 我要问的是,什么是更重要的。

1st way-> 两个查询在使用时使用

$query = "SELECT * FROM products"; (美元)

while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    $query  = "SELECT * 
                 FROM connectionTable 
           INNER JOIN labels ON labels.labelID = connectionTable.labelID 
                WHERE productID = " . $row[ labelID ];
..
..
} 

编号

2nd way-> using group_CONCAT(CONCAT)

例如:

SELECT GROUP_CONCAT(labelName) 
  FROM connectionTable 
INNER JOIN labels ON labels.labelID = connectionTable.labelID 
INNER JOIN products ON products.productID = connectionTable.productID 
     WHERE productID = " . $row[ labelID ] . " GROUP BY productID;

(美元)

问题回答

这两种做法都不好。 在这两起案件中,你都有一个 que。 这不是“两个系列查询”,即查询,第二个查询是第一次查询的浏览次数。

你应该做的是,增加标签和联系。 表2. 休息室外的询问表。

假设你在phpMyAdmin中的询问和使用EXPLAIN?

除此以外,JOIN总会比nes的盘问更快。

你们应想的是,日本海洋研究网,而不是另外的2个问题,并解释如何规划2个问题,即日本海洋研究网赢得了一席。

在你执行询问时,你必须记住,在需要时间和资源的实际询问之外,还有一件事。 记录和说明(如果贵版本的MySQL支持这些变量的话,可使用约束变量加以缓解),确定收回结果的计划,以及网络时间/交易,特别是如果你在另一个东道国重新获得b。 如果你第一次问候会再回100万头,你将再执行第二次问答会100万次,并接手网络的间接费用,以随时间推移而发送。 这远不如一次派出一个联合网络查询,并恢复整个数据集和处理。 更不用说,你在不使用约束变量的情况下,正在做些什么。

注意效率和反应时间不变。 效率可能提高,最终可能从用户的角度来看缓慢。 如果用户用2个单独询问打上了该网页,他/她很可能会看到结果很快,因为现场的个别询问会执行,并将能够输出的小返回点退回到该网页。 将所有各行汇回,但可能比单一日本宇宙开发网络要长得多。 在唯一的JOIN案件中,用户在数据返还之前可能会等待更长时间,但很快就会看到全部数据。

我将同大家一道,确保你们在所加入的栏目上(即产品信息数据库)有索引。 贴上标签的加固指数,贴上标签——名称,可能也取决于表层等,但为了核实,你需要与EXPLAIN联系。 See how the response time is for theiruser(s) and work from where.

The first version is not running 2 queries, it s running 1 + number_of_products queries. If you are loading all products, it s easy:

  • Run SELECT * FROM products and create a map of products, so that you can access them by ID.
  • Run SELECT * FROM connectionTable JOIN labels ON labels.labelID = connectionTable.labelID, iterate over the results, look up the product in the map from the previous step and add the row to the product entry.

如果你只想为有限的产品做这项工作,选择产品,收集产品识别器,使用与以前相同的询问,但使用<编码>。 WHERE 产品ID IN (?, ?, ?, ......)。





相关问题
热门标签