$query1 = "SELECT name FROM clients WHERE sector = '$sectorlink'";
$clientresult = mysql_query($query1, $connection) or trigger_error("SQL", E_USER_ERROR);
while($row = mysql_fetch_array($clientresult)){
$client = $row['name'];
$query = "SELECT * FROM studies WHERE client='$client' ORDER BY date DESC";
$result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR);
/* echo results here */
}
Возможно, вам нужно использовать STRAIGHT_JOIN
.
http://dev.mysql.com/doc/refman/5.0/en/join.html
STRAIGHT_JOIN
аналогиченJOIN
, за исключением того, что левая таблица всегда читается перед правой таблицей. Это можно использовать для тех (нескольких) случаев, когда оптимизатор соединения размещает таблицы в неправильном порядке.
Вы можете попробовать переписать двумя способами
Обе вещи могут повлиять на планировщик.
Первое, что нужно проверить, это актуальность вашей статистики.
Вы можете использовать FORCE INDEX, чтобы принудительно изменить порядок выполнения, и я уже делал это раньше.
Если подумать, то обычно существует только один порядок выполнения запросов к таблицам для любого выбранного вами индекса.
В данном случае, если вы хотите, чтобы MySQL начал запрашивать a
первым, убедитесь, что индекс, который вы навязываете для b
, содержит b.table1_id
. MySQL сможет использовать этот индекс, только если он уже запросил сначала a
.