2013-09-28 197 views
28

我有以下的mySQL查詢,完美的工作。除了我需要添加一個「FORCE INDEX」,我不確定我在哪裏必須這樣做。我嘗試了幾乎每個位置,並總是收到一個mySQL錯誤。我究竟做錯了什麼?FORCE INDEX mySQL ...我把它放在哪裏?

這裏是原始查詢:

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

查詢構造這種方式讓我可以做「ORDER BY」中的「GROUP BY」之前,如果你想知道。

我需要補充的是:

FORCE INDEX (products_start_time) 

我想它幾乎無處不在沒有成功,這使我相信,有我失去了一些東西更復雜?

回答

39

索引提示的語法如下記載:
http://dev.mysql.com/doc/refman/5.6/en/index-hints.html

指數指數的走表引用之後:

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 

警告:

如果」在GROUP BY之前使用ORDER BY得到l每個owner_id都有一個入口,你正在使用一個非標準且沒有記錄的MySQL來做到這一點。

不能保證它會繼續在未來版本的MySQL中工作,並且查詢可能在任何其他RDBMS中都是錯誤的。

標籤中搜索有關此類查詢的更好解決方案的許多解釋。

+0

非常感謝!這工作完美,現在做這項工作,而我尋找更好的解決方案:) – user2643870