sql >> Databasteknik >  >> RDS >> Mysql

FORCE INDEX i MySQL - var ska jag lägga det?

Syntaxen för index tips finns dokumenterade här:
http:// dev.mysql.com/doc/refman/5.6/en/index-hints.html

FORCE INDEX går direkt efter tabellreferensen:

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

VARNING:

Om du använder ORDER BY före GROUP BY för att få den senaste posten per owner_id , använder du ett icke-standardiserat och odokumenterat beteende av MySQL för att göra det.

Det finns ingen garanti för att det kommer att fortsätta att fungera i framtida versioner av MySQL, och frågan kommer sannolikt att vara ett fel i alla andra RDBMS.

Sök i taggen för många förklaringar av bättre lösningar för den här typen av frågor.



  1. SQL WHERE-sats som matchar värden med efterföljande mellanslag

  2. mysql partiell ordsökning

  3. LIKE vs CONTAINS på SQL Server

  4. Anslut till en MySQL-server över SSH i PHP