Ответ 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 тег для многих объяснения лучших решений для этого типа запросов.