select distinct domain
from user
where id = '1'
Поскольку id
- это PRIMARY KEY
, задействовано не более одной строки. Следовательно, ключевое слово DISTINCT
бесполезно.
И самый полезный индекс - это то, что у вас уже есть, PRIMARY KEY(id)
. Он развернет BTree, чтобы найти id='1'
и получить значение domain
, которое находится прямо там.
С другой стороны, рассмотрим
select distinct domain
from user
where something_else = '1'
Теперь , очевидный индекс - INDEX(something_else, domain)
. Это оптимально для предложения WHERE
, и оно «охватывает» (это означает, что все столбцы, необходимые для запроса, существуют в индексе). Обмен столбцов в индексе будет медленнее. Между тем, поскольку может быть несколько строк, DISTINCT
что-то значит. Тем не менее, это не логичная вещь.
Относительно вашего заглавного вопроса (порядок столбцов): столбцы =
в предложении WHERE
должны стоять сначала . (Подробнее в ссылке ниже.)
DISTINCT
означает собрать все строки, а затем дублировать их. Зачем столько усилий, если это дает тот же ответ:
select domain
from user
where something_else = '1'
LIMIT 1
Это ударяет только по одной строке, а не по всем 1.
Прочитайте мою Указатель поваренной книги .
(И да, у Гордона много хороших моментов.)