MySQL: оптимальный тип столбца для поиска - PullRequest
0 голосов
/ 04 августа 2011

Я вставил некоторые цифры как INT UNSIGNED в базу данных MySQL. Я выполняю поиск по этому столбцу, используя «SELECT. Tablename, ГДЕ НРАВИТСЯ 'B”. Я сталкиваюсь с некоторыми числовыми форматами, которые либо слишком длинны для целого числа без знака, либо содержат тире, например 123-456-789.

Какие есть хорошие варианты для модификации таблицы здесь? Я вижу два варианта (есть другие?):

  1. Создайте еще один столбец (VARCHAR (50)) для хранения чисел с тире. Когда поисковый запрос обнаруживает числа с тире, посмотрите в этом новом столбце.

  2. Создайте таблицу заново, используя VARCHAR (50) вместо целого числа без знака для данного столбца.

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

Обновление: думаю, мне следовало добавить больше информации. Это порядковые номера. Цифры без тире предназначены для одного магазина (A), а цифры с тире - для Amazon (B; 13 или 14 цифр, я думаю, с двумя штрихами). Номера заказов А должны быть сортируемыми. Я не уверен, должен ли B быть, потому что числа действительно ничего для меня не значат (просто уникальное число).

Если я удалю тире и соберу их все вместе как big int, будет ли какое-либо снижение производительности в поисковых запросах?

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

самый важный вопрос - как вы хотели бы использовать данные.Что вам нужно?Если вы сделаете varchar, а затем захотите отсортировать его как число, вы не сможете этого сделать, поскольку он будет обрабатывать его как строку. Вы всегда можете рассмотреть big int, однако возникает вопрос: нужно ли вамчерточки?или вы можете просто игнорировать их на уровне приложения?если они вам нужны, значит вам нужен varchar.в этом случае может иметь смысл иметь два столбца, если вы хотите, например, иметь возможность сортировать их как числа или выполнять какие-либо вычисления.в противном случае, вероятно, один имеет больше смысла.Вы должны действительно предоставить больше контекста о проблеме

1 голос
/ 04 августа 2011

Mysql имеет АНАЛИЗ ПРОЦЕДУРЫ , который помогает вам идентифицировать себя с существующими наборами данных. вот пример .

Учитывая, что вы в основном выполняете запрос WHERE A LIKE 'B'. Вы также можете попробовать полнотекстовый поиск, если «А» сильно отличается.

0 голосов
/ 04 августа 2011

Я думаю, что вариант 2 имеет больше смысла. Просто добавьте новый столбец как varchar (50), поместите все в столбце int в этот varchar и бросьте int. Наличие двух отдельных столбцов для поддержки просто не очень хорошая идея.

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