Mysql
 sql >> Database >  >> RDS >> Mysql

FORCE INDEX in MySQL - dove lo metto?

La sintassi per indice hints è documentato qui:
http:// dev.mysql.com/doc/refman/5.6/en/index-hints.html

FORCE INDEX va subito dopo il riferimento alla tabella:

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

AVVISO:

Se stai usando ORDER BY prima di GROUP BY per ottenere l'ultima voce per owner_id , stai utilizzando un comportamento non standard e non documentato di MySQL per farlo.

Non vi è alcuna garanzia che continuerà a funzionare nelle versioni future di MySQL ed è probabile che la query sia un errore in qualsiasi altro RDBMS.

Cerca in tag per molte spiegazioni di soluzioni migliori per questo tipo di query.