MySql Performance Вопрос: MD5 (значение) - PullRequest
3 голосов
/ 17 декабря 2009

в целях безопасности я делаю некоторые запросы следующим образом:

SELECT avatar_data FROM users WHERE MD5(ID) ='md5value'

Так, например, у меня есть эти записи:

-TABLE.users-
ID | avatar_data
39 | some-data

Я делаю этот запрос:

SELECT avatar_data FROM users WHERE MD5(ID) ='d67d8ab4f4c10bf22aa353e27879133c'

'd67d8ab4f4c10bf22aa353e27879133c' - это значение '39', отфильтрованное по MD5.

У меня ОЧЕНЬ большая база данных с большим количеством записей. Интересно, может ли такой подход повлиять на производительность БД?

Ответы [ 4 ]

4 голосов
/ 17 декабря 2009

Поскольку вы используете функцию в столбце, который хотите найти (MD5 (ID) =), MySQL должен будет выполнить полное сканирование таблицы.

Хотя я и не уверен, что у вас есть причина для такого поиска, чтобы ускорить процесс, я могу предложить вам добавить еще один столбец с обработанными данными ID и проиндексировать его.

Итак, вы должны сделать:

SELECT * FROM пользователя WHERE MD5_ID = 'D67d8ab4f4c10bf22aa353e27879133c'

2 голосов
/ 17 декабря 2009

С этим запросом и без функциональных индексов, да, вы бы просканировали всю таблицу целиком. Если вы делаете это часто, вы можете предварительно рассчитать дайджест в суррогатную таблицу или в другой столбец, индексировать и искать напрямую.

0 голосов
/ 13 июля 2010

если вам нужен такой тип безопасности, вам, вероятно, будет лучше, если вы сохраните пароли в виде хеша md5 кодирование идентификатора не дает безопасности

0 голосов
/ 17 декабря 2009

Да, это, вероятно, будет очень медленно, и это действительно не добавляет безопасности. MD5 из '39' довольно легко понять. Чтобы односторонний хеш был успешным, он должен содержать значения, которые были бы неизвестны злоумышленнику. В противном случае злоумышленник просто хеширует значение, и вы ничего не добьетесь.

Возможно, вы захотите опубликовать больше о том, что вы делаете. Например: это инструмент веб-администрирования? Это защищено паролем? И т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...