Вы можете заменить ключевое слово DISTINCT
на предложение GROUP BY
.
SELECT
title
, series_number
FROM
programme_table
WHERE title LIKE '$letter%'
GROUP BY
title
, series_number
В настоящее время есть два других допустимых варианта:
Вариант, предложенный Мухаммедом , заключается в использовании предложения HAVING
вместо предложения WHERE
, которое на самом деле менее оптимально:
Предложение WHERE
используется для ограничения записей, а также оптимизатором запросов для определения используемых индексов и таблиц. HAVING
является «фильтром» для окончательного набора результатов и применяется после ORDER BY
и GROUP BY
, поэтому MySQL не может использовать его для оптимизации запроса.
Так что HAVING
намного менее оптимален, и вы должны использовать его только тогда, когда вы не можете использовать «ГДЕ», чтобы получить свои результаты.
quosoo указывает, что ключевое слово DISTINCT
действительно для всех перечисленных столбцов в запросе. Это правда, но обычно люди не рекомендуют это ( разница в производительности отсутствует * В некоторых конкретных случаях разница в производительности ***) **. Однако оптимизатор MySQL выдает один и тот же запрос для обоих, поэтому фактической разницы в производительности нет.
Обновление
Хотя MySQL применяет одну и ту же оптимизацию к обоим запросам, на самом деле есть разница: когда DISTINCT
используется в сочетании с предложением LIMIT
, MySQL останавливается, как только находит достаточно уникальных строк. так
SELECT DISTINCT
title
, series_number
FROM
programme_table
WHERE
title LIKE '$letter%'
на самом деле лучший вариант.