2013-09-28 4 views
28

私は完全に正常に動作する以下のMySQLのクエリを持っています。私は "強制インデックス"を追加する必要があることを除いて、私はこれを行う必要があるかどうか不安です。私はちょうどすべての場所を試し、常に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"); 

私はあなたが迷っている場合には、「GROUP BY」の前に「BY ORDER」を行うことができるように、クエリがこのように構成されています。私は追加する必要がどのような

は次のとおりです。

FORCE INDEX (products_start_time) 

私が欠けていることが、より複雑な何かがあることを信じるように私をリードされ、成功せず、ちょうど約どこでもそれを試してみましたか?

答えて

39

インデックスヒントの構文はここに文書化されています

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 

WARNING:

あなたが」
http://dev.mysql.com/doc/refman/5.6/en/index-hints.html

インデックスインデックスは右表参照の後に行きますの前にORDER BYを使用してlを得るowner_idごとにatestエントリを作成するには、MySQLの非標準で非公開の動作を使用しています。

将来のバージョンのMySQLで引き続き動作するという保証はなく、他のRDBMSではクエリがエラーになる可能性があります。

タグを検索すると、このタイプのクエリのより良い解決策について多くの説明が得られます。

+0

ありがとうございました!それは完璧に動作し、私はより良いソリューションを探している間、今の仕事をしています:) – user2643870

関連する問題