Хорошо, если PRIMARY KEY
таблицы - это суррогатный ключ и номер, если это возможно. Использование SMALLINT, ``INT
или BIGINT
с применением IDENTITY
. Использование такого определения:
[RowID] INT IDENTITY(1,1)
поможет вам решить некоторые распространенные проблемы - самое главное, что при создании новых записей они будут добавлены в конце последней индексной страницы, поэтому разделение / фрагментация страницы при вставке не будет. ,
Может быть добавлен дополнительный столбец - ваше значение ha sh и вы можете создать для него индекс, чтобы ускорить поиск на ha sh.
Например, у меня есть IP таблица адресов, содержащая все адреса, используемые в приложении (в основном адреса, используемые пользователями для входа в систему).
Таблица выглядит следующим образом:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[IPAddresses]
(
[IPAddressID] BIGINT IDENTITY(10000,1) NOT NULL
,[IPAddress] VARBINARY(84) NOT NULL
,[IPAddressHash] VARBINARY(64) NULL
,CONSTRAINT [PK_IPAddresses] PRIMARY KEY
(
[IPAddressID] ASC
)
,INDEX [IX_IPAddresses_IPAddressHash]
(
[IPAddressHash] ASC
)
)
GO
Поскольку IPAddress
является персональными данными, это должно быть зашифровано. И так как я хочу, чтобы мои данные были нормализованы, и я не хотел иметь дублированные записи, мне нужно каждый раз проверять, входит ли пользователь в систему, если адрес существует - если не создать его. Я делаю это, используя следующую процедуру:
Здесь я передаю адрес и вычисляю га sh, по которому я ищу. Вместо этого оригинальная версия использовала ha sh для расшифровки всех значений и поиска по тексту, но для миллионов IP-адресов это было очень медленно, и эта процедура выполняется постоянно. С другой стороны, я выполняю только вставки в эту таблицу, а записи добавляются только - так что фрагментации вообще нет.
Итак, мой совет:
- номер использования столбец с идентификатором в качестве первичного ключа
- добавить остальные столбцы в таблицу
- добавить столбец ha sh и построить га sh по столбцам, используемым для поиска
- создать индекс для этого столбца ha sh
- , затем, когда вам нужно найти запись, используйте ha sh, найдите идентификатор
PK
и затем используйте идентификатор для извлечения запись