SQL查询运行超慢

问题描述:

我在下面运行的代码运行得非常好,直到我尝试在最后一个循环中获取数量。我认为它可能可以通过JOINs等进行优化,但是在抓取DISTINCT元素时,我并不太熟悉最佳方法?SQL查询运行超慢

$sql_dept = "SELECT DISTINCT `department_guid` FROM `bom_material_copy` WHERE `complex_guid`='9EB75BE9-26E2-AEBB-1B52-37DBC2FB89EA' ORDER BY `id` DESC LIMIT 0,5"; 

foreach($pdo->query($sql_dept) AS $dept) 
{ 
    $sql_mat = "SELECT DISTINCT `material_bct_number` FROM `bom_material_copy` WHERE 
       `complex_guid`='9EB75BE9-26E2-AEBB-1B52-37DBC2FB89EA' AND 
       `department_guid`='".$dept['department_guid']."' 
       ORDER BY `id` DESC LIMIT 0,5"; 

    foreach($pdo->query($sql_mat) AS $mat) 
    { 
     echo "<tr>"; 
      echo "<td>".$mat['material_bct_number']."</td>"; 
      // Grab Units Again 
      $u = 0; 
      $sql_unit = "SELECT DISTINCT `unit_number` FROM `bom_projects_units` WHERE `complex_guid`='9EB75BE9-26E2-AEBB-1B52-37DBC2FB89EA'"; 
      foreach($pdo->query($sql_unit) AS $unit) 
      { 
       $sql_quan = "SELECT `quantity` FROM `bom_material_copy` 
          WHERE 
          `material_bct_number`='".$mat['material_bct_number']."' AND 
          `unit_number`='".$unit['unit_number']."' AND 
          `department_guid`='".$dept['department_guid']."'"; 

       foreach($pdo->query($sql_quan) AS $quan) 
       { 
        echo "<td>".$quan['quantity']."</td>"; 
       } 
      } 
     echo "</tr>"; 
    } 
} 
+1

嵌套查询在性能上很昂贵;尝试通过使用JOIN减少查询的数量 –

+0

除了Mark的评论,它是一个大型数据库吗?您正在查询的表是否正确编入索引? –

+0

这是一个更大的数据库是的。具有数量,ID列和QUANTITY列的表都是索引的,但仅此而已。 –

在您的查询中尝试使用EXPLAIN

当你这样做时,你知道你在查询中使用的表之间的关系。

下一步,在您所匹配的字段中使用INDEX,然后再次执行您的查询。

+0

因此,如果我匹配两个表之间的GUID并说两个表之间的UNIT_GUID - INDEX这些列? –

+0

显然会让事情变得缓慢的列实际上只是QUANTITY列,它与任何其他表都没有关系。它只存储在该表中。 –

+0

@JordiePuchinger'quantity' ** column **应该不会影响你的表现(除非它用于容纳大BLOB);它是您在WHERE子句中使用的条件(和涉及的数据类型)。 – Uueerdo