Mysql
 sql >> Datenbank >  >> RDS >> Mysql

FORCE INDEX in MySQL - wo füge ich ihn ein?

Die Syntax für Index Hinweise sind hier dokumentiert:
http:// dev.mysql.com/doc/refman/5.6/en/index-hints.html

FORCE INDEX steht direkt nach dem Tabellenverweis:

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

WARNUNG:

Wenn Sie ORDER BY verwenden vor GROUP BY um den neuesten Eintrag pro owner_id zu erhalten verwenden Sie dazu ein nicht standardmäßiges und nicht dokumentiertes Verhalten von MySQL.

Es gibt keine Garantie dafür, dass es in zukünftigen Versionen von MySQL weiterhin funktioniert, und die Abfrage ist wahrscheinlich ein Fehler in jedem anderen RDBMS.

Durchsuchen Sie die -Tag für viele Erläuterungen zu besseren Lösungen für diese Art von Abfrage.