Быстрее ли нормализовать эту таблицу? - PullRequest
0 голосов
/ 08 июня 2009

У меня есть две таблицы, подобные этим:

Стол Люди:
VARCHAR Имя
INTEGER Возраст

Таблица сообщений
VARCHAR Сообщение
VARCHAR Имя

Существуют сотни операций вставки и удаления с таблицей сообщений с такими запросами:

insert into Message VALUES ('Hello there', 'John');
delete from Message where name = 'John';

Мой вопрос: стоит ли добавлять поле идентификатора в People и ссылаться на пользователя как идентификатор в сообщении? Будут ли следующие запросы выполняться намного быстрее?

FIRST - select id from User where name = 'John'
THEN - delete from Message where id = $id

Я думал, что сначала вставка и удаление при поиске идентификатора будет быстрее, чем при поиске по символам. Но насколько быстрее? Будет ли увеличение скорости компенсировать снижение производительности от необходимости дополнительного запроса к таблице User, чтобы найти идентификатор?

Ответы [ 11 ]

0 голосов
/ 09 июня 2009

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

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

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

...