В своем посте я подробно описываю технику, которая позволяет использовать индекс с LIKE
для быстрого %infix%
поиска , за счет некоторыхдополнительное хранилище:
https://stackoverflow.com/a/22531268/543814
Пока строки относительно невелики, требования к хранилищу обычно приемлемы.
По данным Google, средний адрес электронной почтыдлиной 25
символов.Это увеличивает требуемое хранилище в среднем в 12.5
раз и обеспечивает быстрый индексированный поиск в ответ.(См. Мой пост для расчетов.)
С моей точки зрения, если вы храните 10 000 адресов электронной почты, вы должны хорошо хранить (эквивалентно) около 100 000 адресов электронной почты,тоже.Если это то, что нужно, чтобы позволить вам использовать индекс, это кажется приемлемым компромиссом.Зачастую дисковое пространство дешевое, а неиндексированные поиски недоступны.
Если вы решите воспользоваться этим подходом, я предлагаю ограничить длину ввода адресов электронной почты 64
символами.Этим редким (или злоумышленникам) адресам электронной почты такой длины потребуется в 10 * 10 раз больше обычного хранилища.Это дает вам:
- Защита от злоумышленника, пытающегося заполнить вашу базу данных, поскольку эти данные все еще не очень впечатляющие.
- Ожидание того, что большинство адресов электронной почты являютсяв любом случае не такой длины.
Если вы считаете 64
символами слишком жесткими, используйте вместо этого 255
, чтобы коэффициент увеличения хранилища в худшем случае составил 127.5
.Смешной?Возможно.Скорее всего?Нет. Быстро?Очень.