2013-09-28 18 views
28

Mam następujące kwerendy mySQL, które działa idealnie dobrze. Poza tym, że muszę dodać "indeks siły" i nie jestem pewien, gdzie muszę to zrobić. Próbowałem prawie każdej lokalizacji i zawsze otrzymuję błąd mySQL. Co ja robię źle?FORCE INDEX mySQL ... gdzie mogę to umieścić?

Oto oryginalny zapytania:

$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"); 

Zapytanie jest skonstruowana w ten sposób, aby można było zrobić „ORDER BY” przed „grupa przez”, w przypadku, gdy zastanawiasz się.

Co muszę dodać to:

FORCE INDEX (products_start_time) 

Próbowałem go niemal wszędzie bez sukcesu, który prowadzi mnie do przekonania, że ​​istnieje coś bardziej skomplikowane, że mi brakuje?

Odpowiedz

39

Składnia podpowiedzi indeksu jest udokumentowane tutaj:
http://dev.mysql.com/doc/refman/5.6/en/index-hints.html

Indeks Indeks iść zaraz po nawiązaniu tabeli:

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 

UWAGA:

Jeśli” ponownie użyj ORDER BY przed GROUP BY, aby uzyskać atest entry per owner_id, do tego celu używasz niestandardowego i nieudokumentowanego zachowania MySQL.

Nie ma gwarancji, że będzie działał w przyszłych wersjach MySQL, a zapytanie prawdopodobnie będzie błędem w każdym innym RDBMS.

Wyszukaj w tagu wiele wyjaśnień lepszych rozwiązań dla tego typu zapytania.

+0

Dziękuję bardzo! To działa idealnie i działa teraz, a ja szukam lepszych rozwiązań :) – user2643870