primary - FORCE INDEX mySQL... ¿dónde lo pongo?
mysql not using index (1)
Tengo la siguiente consulta mySQL que funciona perfectamente bien. Excepto que necesito agregar un "ÍNDICE DE FUERZA" y no estoy seguro de dónde tengo que hacer esto. Intenté casi todas las ubicaciones y siempre recibo un error mySQL. ¿Qué estoy haciendo mal?
Aquí está la consulta original:
$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");
La consulta se construye de esta manera para que pueda hacer el "ORDER BY" antes de "GROUP BY", en caso de que se lo esté preguntando.
Lo que necesito agregar es:
FORCE INDEX (products_start_time)
Lo intenté casi en todas partes sin éxito, lo que me lleva a pensar que me falta algo más complejo.
La sintaxis para las sugerencias de índice está documentada aquí:
http://dev.mysql.com/doc/refman/5.6/en/index-hints.html
Índice índice ir a la derecha después de la referencia de la tabla:
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
ADVERTENCIA:
Si está utilizando ORDER BY
antes de GROUP BY
para obtener la última entrada por owner_id, está utilizando un comportamiento no estándar e indocumentado de MySQL para hacerlo.
No hay garantía de que continuará funcionando en futuras versiones de MySQL, y es probable que la consulta sea un error en cualquier otro RDBMS.
Busque la etiqueta de greatest-n-per-group para obtener muchas explicaciones de mejores soluciones para este tipo de consulta.