Можно ли создать индекс на такую выборку?

Духовность™

Продвинутый новичок
Можно ли создать индекс на такую выборку?

Сверяем хэш с данными из базы:

SELECT *
FROM `users`
WHERE MD5( CONCAT( `user_mail` , "salt_uniq_1112233" ) ) = "c9cd3ebea830fb662ae07e3318867502"

Это необходимо для активации пользователей.
 
на такую нет, но ты можешь завести отдельное поле с этим значением и индексом на нём.
 
Я бы реализовал отдельную таблицу, в которой бы хранил пары <user_id, ключ активации>, а в таблице users хранил бы поле которое хранило статус пользователя (Активирован/Не активирован).
Тогда по дополнительной таблице можно было бы построить индекс. А в случае если записи с таким кодом нету, то либо неверный код, либо пользователь уже активирован.
Кстати помимо ключа активации я бы еще передавал и user_id пользователя, так как это позволит избежать возможных коллизий.
 
triumvirat
Ну заведи когда эта операция будет действительно медленно работать. Всё равно такой момент наступит после 20K записей, а то и намного позже (если в таблице нет больших текстовых полей и сервер не еле дышит). А заставить даже 20 тыщь человек зарегистрироваться с подтверждением по email'у это не просто, get in real.
 
Переходи на постгрес, там можно ;) Мускуль индексы по выражениями строить не умеет =(
 
А почему б в ссылке для активации айдишник пользователя не передавать тож?
 
kruglov
а какой в этом смысл?

Посчитай количество исполнений этого "одного случая"
ну? 1 раз - когда идет запрос на подтверждение из письма. больше никогда.

-~{}~ 12.09.08 23:15:

phprus
понятно. спасибо.
 
я не пойму зачем при активации ID передавать
А я не понимаю, зачем по 32-байтному полю индекс делать. И зачем базировать поиск на теоретически подверженным коллизиям хэшах. Квиты?
 
И правильно ли я понимаю, что узнав "salt_uniq_1112233", я смогу активировать миллион левых пользователей в этой оригинально написанной системе активации?
 
triumvirat
Security by obscurity? Ну-ну...

а когда узнаете - я её поменяю
Ага, и так же по-быстрому вычистите 1 000 000 левых аккаунтов. Ну и пошлете нафих тех, кому письмо было отправлено еще "при старом режиме".

Если вы пишете систему для себя и под себя, это не повод делать ее дырявой, isn't it?
 
kruglov
Начнем с того, что соль Вы не узнаете. А если Вы узнаете соль, то вы узнаете и параметры подключения к субд и много всего интересного. Тогда мне легче сразу застрелиться.

Что Вы предлагаете, скажите?
 
triumvirat, если у Вас не мильярд пользователей, ничего страшного не будет в хранении кода активации (MD5( CONCAT( `user_mail` , "salt_uniq_1112233" ) )) с индексом в таблице юзверей
 
Еще проще, хранить не мд5(конкат(какая-то байда)), а просто случайное число.
 
Сверху