Mysql
 sql >> Base de données >  >> RDS >> Mysql

FORCE INDEX dans MySQL - où dois-je le mettre ?

La syntaxe de index conseils est documenté ici :
http:// dev.mysql.com/doc/refman/5.6/en/index-hints.html

FORCE INDEX va juste après la référence de la table :

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

AVERTISSEMENT :

Si vous utilisez ORDER BY avant GROUP BY pour obtenir la dernière entrée par owner_id , vous utilisez un comportement non standard et non documenté de MySQL pour ce faire.

Il n'y a aucune garantie que cela continuera à fonctionner dans les futures versions de MySQL, et la requête est susceptible d'être une erreur dans tout autre RDBMS.

Rechercher dans tag pour de nombreuses explications de meilleures solutions pour ce type de requête.