Дизайн базы данных: индекс Varchar - PullRequest
3 голосов
/ 20 апреля 2011

У меня есть таблица с первичным ключом, который является целым числом, а затем столбец, который используется для поиска по типу, и это varchar.Скажем, content_id и content_type.

SELECT * FROM TABLE_A WHERE content_type='abc'

varchar content_type имеет длину 255. Я думаю об индексации его для более быстрых запросов SELECT.Это улучшит производительность?И даже если он имеет длину 255, если используются только 5 символов, а не целые 255, это изменит производительность?

Ответы [ 3 ]

10 голосов
/ 20 апреля 2011

Индекс на content_type должен ускорить ваши запросы для:

select * from table_a where content_type = 'whatever';
select * from table_a where content_type like 'whatever%';

Но это не сделает ваши запросы быстрее для:

select * from table_a where content_type like '%whatever%';

Не имеет значения, есливы используете только 5 из 255 доступных символов.

2 голосов
/ 20 апреля 2011

Вот несколько пунктов маркера:

  • Индекс улучшит вашу производительность по запросам на чтение (например, SELECT). Тем не менее, это имеет тенденцию снижать производительность запросов на запись (например, INSERT и UPDATE). Это особенно верно, так как вы получаете все больше и больше записей в своей таблице.

  • Использование только 5/255 символов не повлияет на производительность индекса настолько, чтобы заметить.

Надеюсь, это поможет!

0 голосов
/ 20 апреля 2011

Хотелось бы добавить, что он будет ускорять запросы только к достаточно большой таблице.

На postgres varchar использует только столько места, сколько необходимо для фактических значений, максимальная длина ограничивает то, что postgres позволяет вставлять Таким образом, верхний предел 255 не приведет к потере места в индексе.

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