Первичный индекс для поля b, c, d был бы хорош, если применимо.
В этом случае вы просто делаете
SELECT * FROM table1
group by <insert PRIMARY KEY here>
Если не поставить индекс на b, c, d.
А может быть, зависит от производительности.
Если b, c, d всегда используются в унисон, используйте составной индекс для всех трех.
Очень важно!Всегда объявляйте первичный ключ.Без этого производительность на InnoDB будет отстойной.
Чтобы уточнить @zerkms, вам нужно только поместить те столбцы в группу group by, которые полностью определяют строки, которые вы выбираете.
Если вы select *
, это может быть хорошо, но чемПараметр max (a) не требуется, также как и группировка по.
Также обратите внимание, что max(a)
может происходить из строки, отличной от остальных полей.
Единственный вариант использования, который имеет смысл:
select t1.*, count(*) as occurrence from t1
inner join t2 on (t1.id = t2.manytoone_id)
group by t1.id
Где t1.id - это PK.
Я думаю, вам нужно переосмыслить этот запрос.
Задайте новый вопрос, объясняющий, что вы хотите с реальным кодом.
И обязательно задайте how to make the outcome
определите , so that all values shown are functionally dependent on the group by clause
.