flashnfantasy: JOIN-Query sehr langsam

Beitrag lesen

Wenn ich die Query richtig verstehe, dann willst du alle Berater ausgeben, und zusätzlich dazu sollen die Städte ausgegeben werden, in denen die Berater tätig sind ?
Vermutlich wird das Left Join im Zusammenhang mit dem größer/kleiner einen Full-Table-Scan machen.

Vielleicht hilft dir folgende Funktion weiter.
Du übergibst den Query-String und sie zeigt an, wie groß die Kardinalität der Abfrage ist.
Mit dem Optionalen 2.ten Parameter =1 kriegst du dann auch den Ergebnisswert angezeigt.
Dann siehst du auch, ob die Indizierung genutzt wird.

function analyseQuery ($query, $mode = 0)
{
  $ergq = mysql_query("EXPLAIN $query");
  print "\n\n<!-- Explain -->\n<table border="1" cellspacing="0">";
    print "<tr>";
    print "<td colspan="8" class="tinytableCC">".hiliSQL(htmlentities($query))."</td>";
    print "</tr>";
    print "<tr>";
    print "<td class="tinytableCC">table</td>";
    print "<td class="tinytableCC">type</td>";
    print "<td class="tinytableCC">possible_keys</td>";
    print "<td class="tinytableCC">key</td>";
    print "<td class="tinytableCC">key_len</td>";
    print "<td class="tinytableCC">ref</td>";
    print "<td class="tinytableCC">rows</td>";
    print "<td class="tinytableCC">Extra</td>";
    print "</tr>";
  $rowsprod = 1;
  while ($dsatz = mysql_fetch_array($ergq))
  {
    if (isset($dsatz["Comment"]))
    {
      print "\n\t<tr><td colSpan="8" class="tinytableCC">".$dsatz["Comment"]."</td></tr>";
    }
    else
    {
      $rows = $dsatz["rows"];
      $rowsprod *= $rows;
      print "\n\t<tr>";
      print "<td class="tinytableCC">".$dsatz["table"]."</td>";
      print "<td class="tinytableCC">".$dsatz["type"]."</td>";
      print "<td class="tinytableCC">".$dsatz["possible_keys"]."</td>";
      print "<td class="tinytableCC">".$dsatz["key"]."</td>";
      print "<td class="tinytableCC">".$dsatz["key_len"]."</td>";
      print "<td class="tinytableCC">".$dsatz["ref"]."</td>";
      print "<td class="tinytableCC">$rows</td>";
      print "<td class="tinytableCC">".$dsatz["Extra"]."</td>";
      print "</tr>";
    }
  }
    print "<tr>";
    print "<td colspan="8" class="tinytableCC">Anzahl Abfragen = $rowsprod</td>";
    print "</tr>";
  if ($mode == 1)
  {
    $ergqr = mysql_query("$query");
    $c = queryrows($ergqr);
    print "<tr>";
    print "<td colspan="8" class="tinytable">Anzahl Treffer = $c</td>";
    print "</tr>";
  }
  print "</table>";
}