2013-03-08 7 views
1

Я собираюсь создать таблицу, которая будет иметь количество строк между 1000-20000, и у меня есть поля, которые могли бы повторить много ... около 60% строк будут иметь это значение, где примерно каждый 50-100 имеют общую стоимость.MYSQL - int или короткая строка?

В последнее время меня беспокоит эффективность, и мне интересно, будет ли лучше хранить эту строку в каждой строке (она будет между 8-20 символами) или создать другую таблицу и связать ее с ее представителем ID вместо этого ... Итак, имея ~ 1-50 строк в этой таблице, заменяя около 300-5000 строк с помощью ints?

Является ли это хорошим подходом или вообще необходимым?

ответ

1

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

1

Я бы рекомендовал использовать int с внешним ключом в таблицу поиска (как описано во втором сценарии). Это приведет к тому, что индекс будет намного меньше индексации VARCHAR, поэтому требуемое хранилище будет меньше. Он должен работать лучше.

1

Авитус прав, что, как правило, хорошая практика создания поисковых запросов.

Подумайте о JOINS, в которой вы будете использовать эту таблицу. 1000-20000 строк не много обрабатываются MySQL. Если у вас их нет, я бы не стал беспокоиться о поиске, просто проиндексируйте столбец.

НО, как только вы начинаете присоединяться к таблице с другими (того же размера), в которые входит потеря производительности, которую вы можете (скорее всего) компенсировать, введя поисковые запросы.

2

Да, это хороший подход в большинстве случаев. Это называется нормализацией, и в основном делается по двум причинам:

  • Удаления повторных данные
  • Избежания повторяющегося лица

Я не могу сказать из вашего вопроса, что причина будет в вашем случае.

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

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

+0

Ну, я хочу, чтобы избежать повторения плюс «сведение к минимуму», используя больше ints и меньше строк ... Эти поля не будут редактироваться часто – Colandus

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