Подтвердить что ты не робот

FORCE INDEX mySQL... где я могу его поместить?

У меня есть следующий запрос mySQL, который отлично работает. За исключением того, что мне нужно добавить "FORCE INDEX", и я не уверен, где я должен это делать. Я пробовал практически все места и всегда получаю ошибку mySQL. Что я делаю неправильно?

Вот оригинальный запрос:

$sql_select_recent_items = $db->query("SELECT * FROM (SELECT owner_id, product_id, start_time, price, currency, name, closed, active, approved, deleted, creation_in_progress FROM db_products ORDER BY start_time DESC) as resultstable
WHERE resultstable.closed=0 AND resultstable.active=1 AND resultstable.approved=1 AND resultstable.deleted=0 AND resultstable.creation_in_progress=0
GROUP BY resultstable.owner_id
ORDER BY start_time DESC");

Запрос сконструирован таким образом, чтобы я мог выполнить "ORDER BY" перед "GROUP BY", если вам интересно.

Что мне нужно добавить:

FORCE INDEX (products_start_time)

Я пробовал это практически везде без успеха, что заставляет меня поверить, что там что-то более сложное, чего я не хватает?

4b9b3361

Ответ 1

Синтаксис для подсказок индексов описан здесь:
http://dev.mysql.com/doc/refman/5.6/en/index-hints.html

Индекс указывается сразу после ссылки на таблицу:

  SELECT * FROM (
    SELECT owner_id, product_id, start_time, price, currency, name, closed, 
      active, approved, deleted, creation_in_progress FROM db_products

     FORCE INDEX (products_start_time) 

    ORDER BY start_time DESC) as resultstable
  WHERE resultstable.closed=0 
    AND resultstable.active=1
    AND resultstable.approved=1
    AND resultstable.deleted=0
    AND resultstable.creation_in_progress=0
  GROUP BY resultstable.owner_id
  ORDER BY start_time DESC

Внимание:

Если вы используете ORDER BY до GROUP BY, чтобы получить последнюю запись на owner_id, для этого вы используете нестандартное и недокументированное поведение MySQL.

Там нет гарантии, что он будет продолжать работать в будущих версиях MySQL, и запрос, вероятно, будет ошибкой в ​​любой другой СУБД.

Найти greatest-n-per-group тег для многих объяснения лучших решений для этого типа запросов.