2013-05-27 5 views
2

Что индекса мне нужно создать, чтобы избежать порядка с помощью временных, FileSortКак избежать последовательностей с помощью временных, FileSort

EXPLAIN SELECT tid, sum(count)  
       FROM test 
       WHERE cid = 1 
       GROUP BY tid 
       ORDER BY sum(count) DESC 

    1 SIMPLE test ref  PRIMARY,id_UNIQUE,cid cid  4 const 2 Using where; Using index; Using temporary; Using filesort 

Создать таблицу:

CREATE TABLE test(
      cid INT, 
      tid INT, 
      datedm INT, 
      count INT, 
      PRIMARY KEY(cid,tid,datedm), 
      INDEX(cid,tid,count), 
      UNIQUE INDEX id_UNIQUE(cid,tid,datedm) 
     ); 

ответ

1

В этом случае вы можете» t: ORDER BY имеет агрегированное значение, которое невозможно индексировать как таковое.

Обратите внимание, что ваш последний индекс идентичен первому ключу. Однако, если вы отмените его на tid, cid, это может помочь, потому что GROUP BY также подразумевает ORDER BY. Но у вас могут возникнуть проблемы с предложением WHERE из-за того, как работает MySQL.