Что быстрее: SELECT DISTINCT или отдельная таблица

PN
На сайте с 22.08.2012
Offline
103
853

Уважаемые знатоки MySQL!

Допустим, есть таблица комментариев. И в ней поле E-mail, при этом поле, естественно, может повторяться, т.к. один пользователь может оставить несколько комментариев. В админке нужно выводить список всех E-mail. Так вот есть два способа решения:

1) отдельная таблица emails с UNIQUE email, туда добавляется E-mail каждый раз при написании нового комментария, как INSERT IGNORE.

2) SELECT DISTINCT email FROM comments, при этом у email есть индекс INDEX.

Что быстрее? Будет ли MySQL-сервер при запросе SELECT DISTINCT email считывать просто все подряд из индекса или будет перебирать всю таблицу?

Спасибо!

Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1
K
На сайте с 03.06.2015
Offline
45
#1

По заповедям тексты не должны повторяться. Зачем инсерт игноре - инсерт и дубликате ки убдате

MYSQL PHP JS HTML CSS SEO TXT США СССР
lutskboy
На сайте с 22.11.2013
Offline
185
#2

Зачем отдельная таблица если данные будут выводиться только в админке.

Да и не в админке тоже.

SELECT DISTINCT и все

или GROUP BY

K
На сайте с 03.06.2015
Offline
45
#3

Админка тут временно. Позже ТС может захотеть сделать рассылку по этим адресам, или банить по адресу, или продать их кому-нить на спам, или порыться через них в социале и собрать все досье.

Следовательно нужна каноничная таблица users с той лишь разницей что поле passw может быть null. Автоматическое добавление юзера по введенному имейлу делается через тот самый запрос. Прицепить такую таблицу к каментам по user_id еще более каноничная и тривиальная задача.

Ну то есть обычная юзерская схема, только вся гостевая, или не вся, а только тех, у кого пассв - нул.

PN
На сайте с 22.08.2012
Offline
103
#4

если что, это был гипотетический вопрос, никакой таблицы комментариев и емейлов нет:)я мог вместо E-mail придумать любое другое поле. Вопрос именно в скорости работы SELECT DISTINCT и выборки из отдельной таблицы.

RS
На сайте с 11.07.2015
Offline
1
#5
proksey-net:
если что, это был гипотетический вопрос, никакой таблицы комментариев и емейлов нет:)я мог вместо E-mail придумать любое другое поле. Вопрос именно в скорости работы SELECT DISTINCT и выборки из отдельной таблицы.

Если так, то SELECT email FROM быстрее чем SELECT DISTINCT email FROM, при стандартных настройках и архитектуре СУБД.

L
На сайте с 10.02.2015
Offline
247
#6

Конечно же SELECT без DISTINCT быстрее SELECT c DISTINCT :)

K
На сайте с 03.06.2015
Offline
45
#7
proksey-net:
Вопрос именно в скорости работы SELECT DISTINCT и выборки из отдельной таблицы.

Нет, вопрос именно в парадигме. Или вы заполняете базу хламом и потом разгребаете его в рабочем порядке как программисты делают, или вы заполняете базу фактами и оперируете их отношениями как делают инженеры БД.

edogs software
На сайте с 15.12.2005
Offline
775
#8
proksey-net:
Уважаемые знатоки MySQL!
Допустим, есть таблица комментариев. И в ней поле E-mail, при этом поле, естественно, может повторяться, т.к. один пользователь может оставить несколько комментариев. В админке нужно выводить список всех E-mail. Так вот есть два способа решения:
1) отдельная таблица emails с UNIQUE email, туда добавляется E-mail каждый раз при написании нового комментария, как INSERT IGNORE.
2) SELECT DISTINCT email FROM comments, при этом у email есть индекс INDEX.

Что быстрее? Будет ли MySQL-сервер при запросе SELECT DISTINCT email считывать просто все подряд из индекса или будет перебирать всю таблицу?

Спасибо!

Разницы в скорости не будет, будет считывать все из индекса.

---------- Добавлено 03.08.2015 в 23:13 ----------

kostyanet:
Нет, вопрос именно в парадигме. Или вы заполняете базу хламом и потом разгребаете его в рабочем порядке как программисты делают, или вы заполняете базу фактами и оперируете их отношениями как делают инженеры БД.
Нормальный человек делает так, как лучше в конкретной ситуации. Хороший программист отлично знает про нормализацию и когда ее использовать, хороший инженер отлично знает про денормализацию и когда ее использовать.
Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
K
На сайте с 03.06.2015
Offline
45
#9

Программист и напишет "использовать нормализацию", как будто бы это надстройка, а не базис.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий