SQL дизайн для производительности - PullRequest
0 голосов
/ 04 января 2012

Я новичок в SQL, и у меня есть базовый вопрос о производительности.

Я хочу создать базу данных пользователей, в которой будет храниться информация о моих пользователях:

  • Id
  • Имя для входа
  • Пароль
  • Настоящее имя

Позже я хочу выполнить SELECT запрос: Id, Имя входа и Настоящее имя.

Каков наилучший дизайн для этой базы данных, какие таблицы и какие ключи мне следует создать?

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Если речь идет только о тех 4 полях, то это выглядит как одна таблица. Первичный ключ на ID, уникальный индекс на LoginName. Вы можете не хотеть хранить пароль, а только хеш.

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

UPDATE: Создание индекса для определенных столбцов позволяет базе данных оптимизировать свои операторы SQL. Учитывая вашу пользовательскую таблицу:

USER
    USER_ID BIGINT NOT NULL
    LOGIN_ID VARCHAR(<size>) NOT NULL
    PASSWORD VARCHAR(<size>) NOT NULL
    NAME VARCHAR(<size>) NOT NULL

CONSTRAINT PK_USER PRIMARY KEY ( USER_ID )

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

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

CREATE INDEX I_USER_1 ON USER ( LOGIN_ID asc )

Указанный выше индекс оптимизирует select * from USER where LOGIN_ID='foo'. Кроме того, вместо этого вы можете создать уникальный индекс, предполагая, что вы не хотите дублировать LOGIN_ID s:

CREATE UNIQUE INDEX UI_USER_1 ON USER ( LOGIN_ID asc )

Вот и вся история, поэтому, если вы хотите оптимизировать запрос для реального имени пользователя (NAME), просто создайте еще один индекс:

CREATE INDEX I_USER_2 ON USER ( NAME asc )
0 голосов
/ 04 января 2012

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

В любом случае, вы также спрашивали о столбце ИМЯ. Если вы собираетесь сопоставлять столбец varchar, возможно, стоит изучить использование индексов FULLTEXT.

http://msdn.microsoft.com/en-us/library/ms187317.aspx

Это позволяет выполнять оптимизированный поиск по именам, в которых могут совпадать части имени и т. П. Как сказал ответ @homes, это действительно зависит от ваших запросов и намерений при написании запроса.

Может быть, стоит составить таблицу и использовать план выполнения запросов в чем-то вроде SQL Management Studio для ваших запросов и посмотреть, как ваши индексы влияют на количество строк и сортировку, которая происходит.

http://www.sql -server-performance.com / 2006 / выполнение запрос план-анализ /

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