Это должно помочь вам.Перепишите запрос следующим образом:
SELECT c1, Sum(c2)
FROM table
WHERE c4 = 2011
AND c5 = 0
AND c6 In (6,9,11)
AND c3 IS NOT NULL
GROUP BY c1
Теперь создайте составной индекс по столбцам (c4, c5, c6) со столбцами IN THAT ORDER.Столбцы в вашем индексе должны отображаться в том же порядке, что и столбцы в предложении WHERE.В противном случае индекс не будет работать.Избирательность этого индекса достаточно узка, поэтому сортировка файлов во временной таблице (для группы по) должна быть быстрой.
Причина перемещения c3 в конец запроса заключается в следующем.В качестве примера, давайте предположим, что c3 может принимать значения от 0 до 100 (или это может быть NULL).Если вы выполняете запрос «IS NOT NULL», Mysql должен пройти почти весь индекс B-Tree, кроме ребер, соответствующих NULL.Поэтому MySQL решает, что полное сканирование таблицы является более простым вариантом, чем обход всех различных путей в индексе.С другой стороны, вы увидите, что если ваш запрос был «IS NULL», а ваш индекс (c3, c4, c5, c6), то Mysql будет воздействовать на этот индекс.Это связано с тем, что в этом случае Mysql необходимо пройти только ту часть дерева индексов, которая соответствует значению NULL.
Тип индексов, в которых нуждается MySQL, очень сильно зависит от рассматриваемого запроса.Создание индексов для всех столбцов, как предположил @louis, НЕ является хорошей идеей!