Есть ли способ заставить порядок выполнения MySQL?

Попробуйте это:

$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 */

}
23
задан bakkal 11 August 2010 в 10:13
поделиться

3 ответа

Возможно, вам нужно использовать STRAIGHT_JOIN .

http://dev.mysql.com/doc/refman/5.0/en/join.html

STRAIGHT_JOIN аналогичен JOIN , за исключением того, что левая таблица всегда читается перед правой таблицей. Это можно использовать для тех (нескольких) случаев, когда оптимизатор соединения размещает таблицы в неправильном порядке.

37
ответ дан 28 November 2019 в 23:27
поделиться

Вы можете попробовать переписать двумя способами

  • перенести часть условия WHERE в JOIN
  • ввести подзапросы, даже если они не нужны

Обе вещи могут повлиять на планировщик.

Первое, что нужно проверить, это актуальность вашей статистики.

3
ответ дан 28 November 2019 в 23:27
поделиться

Вы можете использовать FORCE INDEX, чтобы принудительно изменить порядок выполнения, и я уже делал это раньше.

Если подумать, то обычно существует только один порядок выполнения запросов к таблицам для любого выбранного вами индекса.

В данном случае, если вы хотите, чтобы MySQL начал запрашивать a первым, убедитесь, что индекс, который вы навязываете для b, содержит b.table1_id. MySQL сможет использовать этот индекс, только если он уже запросил сначала a.

4
ответ дан 28 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: