2015-12-02 9 views
0

Я планирую базу данных, которая имеет мини-план счетов. коды Моя учетная запись являются имена, как:Влияние длинного символа в качестве первичного ключа

  • CURRENT_DEBTORS
  • CURRENT_CREDITORS
  • CASH_AT_BANK

Я имею в виду, используя коды счетов в качестве первичного ключа в базе данных учетных записей, что будет означать его бы быть внешним ключом в таблице транзакций. Поле будет чем-то вроде CHAR (20) в MySql. Таблица транзакций будет получать около 10 000 записей в месяц.

Как этот индекс длинного иха влияет на производительность? Я могу использовать суррогатный ключ, если я тоже, но предпочел бы не слишком. (Разумеется, я не слишком беспокоюсь о дискового пространства).

+0

Является ли это 'CHAR (20) utf8'? Если это так, это занимает 60 байт. Сделайте это «CHARACTER SET ascii», если это необходимо. –

+0

Бывают случаи, когда «натуральный» ПК на самом деле быстрее и меньше, чем добавление суррогатной «AUTO_INCREMENT' PK. Одним из примеров является отсутствие вторичного ключа. –

ответ

-1

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

Практически, однако, ответ таков: не делайте этого таким образом. Храните эти коды в таблице, дайте каждому уникальный идентификатор целого числа (столбец AUTO_INCREMENT) и сделайте это целое число своим внешним ключом. Это нормально нормализовано, использует намного меньше места, чем дополнительный CHAR(20) в каждой строке, и будет налагать гораздо меньший удар производительности.

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