2012-05-30 2 views
1

Я ищу, чтобы облегчить клиентам поиск таких вещей, как номера телефонов/мобильных/факсов. Чтобы это произошло, я хочу разделить как значение поиска, так и соответствующие столбцы в моей базе данных любых нечисловых символов перед их сопоставлением. Я использую these functions, чтобы получить только числовые элементы строк в mysql, но они замедляют мои запросы до сканирования, когда я их использую.Есть ли способ получить только числовые элементы строки в mysql?

Есть ли способ сделать это, не выдувая мое время бега высотой?

ответ

2

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

Это в дополнение к тому, что вам нужно вычислить выход функции для каждой записи.

+0

Да, я так много разобрался, но я не могу придумать другого способа сделать это. – Bogdan

+0

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

2

Лучший способ обойти эти промежутки времени, если у вас есть доступ и разрешение на это, заключается в том, чтобы добавить новый столбец с фильтром, который вы фильтруете. Добавьте триггер WRITE, чтобы заполнить столбец разделенными значениями, запустите сценарий, который обновляет поле один раз для всех записей. Добавьте индекс и включите новый столбец. Затем в вашем приложении используйте новый столбец для поиска номера телефона. Недостатки - это изменения схемы таблицы и добавленный код для бизнес-логики и/или уровня абстракции данных.

+0

Хм, если это единственный способ, то мы, вероятно, пропустим этот обновление качества жизни для наших клиентов, потому что добавление, которое потребует много времени для не очень большой выгоды. – Bogdan

+0

Не так много, +1 от меня – fancyPants

+0

В нашем случае это очень много, поскольку у нас есть около миллиона способов добавить такие данные, не говоря уже о настраиваемых полях, которые также могут быть определены как номера телефонов и тому подобное. В любом случае, спасибо за помощь 0xCAFEBABE и получите +1 – Bogdan

Смежные вопросы