1

このクエリがインデックスを使用していない理由を誰かに教えてもらえますか?私がインデックスを作成したidx_accessorieslinkid:

    CREATE INDEX idx_accessorieslinkid ON `accessorieslink` (actionid);

私はインデックスに不慣れで、それらがどのように機能するかを理解しようとしています(そしてなぜ時々機能しないのですか!)

sql

 SELECT action.actionid
     FROM
      ACTION 
      LEFT JOIN 
(SELECT 
  SUM(accprice) AS accprice,
  actionid
FROM
  accessorieslink 
GROUP BY actionid) AS accprice 
ON accprice.actionid = action.actionid 
    WHERE action.typeid = '2'
      AND actiondate2 BETWEEN '20130301' AND '20130301' 
    ORDER BY actiondate2 DESC 

結果を説明する

    id  select_type  table     type         possible_keys                   key key_len ref rows Extra
    1   PRIMARY      action    index_merge  idx_actiontypeid,idx_actiondate idx_actiondate,idx_actiontypeid  4,5 141    Using intersect(idx_actiondate,idx_actiontypeid); Using         where; Using index; Using temporary; Using filesort  
    1   PRIMARY      <derived2>       ALL   7804                    
    2   DERIVED      accessorieslink  ALL   12175                             Using temporary; Using filesort 
4

1 に答える 1

1

派生テーブルは、物理テーブルのインデックスを使用できません。

以下のクエリを試してください

SELECT  SUM(accprice) AS accprice, accessorieslink.actionid FROM accessorieslink 
LEFT JOIN  `action`  ON accessorieslink.actionid = action.actionid 
GROUP BY accessorieslink.actionid
于 2013-03-05T09:05:19.853 に答える