powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Индекс в БД
8 сообщений из 8, страница 1 из 1
Индекс в БД
    #40053110
Kaktyc007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE [dbo].[Отпечатки] (
    [ИдОтпечатка]  INT             IDENTITY (1, 1) NOT NULL,
    [ИдСотрудника] INT             NULL,
    [Особенность]  VARBINARY (MAX) NULL,
    PRIMARY KEY CLUSTERED ([ИдОтпечатка] ASC),
    CONSTRAINT [FK_Отпечатки_ToTable] FOREIGN KEY ([ИдСотрудника]) REFERENCES [dbo].[Сотрудники] ([ИдСотрудника])
);


Хочу добавить индекс к полю [Особенность]
Делаю это так:
Код: sql
1.
create index ИнОсобенность on Отпечатки (Особенность)


Но получаю ошибку:
Код: sql
1.
Column 'Особенность' in table 'Отпечатки' is of a type that is invalid for use as a key column in an index.


Как мне добавить индекс к полю [Особенность]? Индекс нужен для быстрого поиска и сравнения отпечатка.
...
Рейтинг: 0 / 0
Индекс в БД
    #40053114
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kaktyc007
Как мне добавить индекс к полю [Особенность]?
Никак.

Надо примерно так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE [dbo].[Отпечатки] (
    [ИдОтпечатка]  INT             IDENTITY (1, 1) NOT NULL,
    [ИдСотрудника] INT             NULL,
    [Особенность]  VARBINARY (MAX) NULL,
    [Особенность__hash] as checksum([Особенность]),
    PRIMARY KEY CLUSTERED ([ИдОтпечатка] ASC),
    CONSTRAINT [FK_Отпечатки_ToTable] FOREIGN KEY ([ИдСотрудника]) REFERENCES [dbo].[Сотрудники] ([ИдСотрудника])
);

create index ИнОсобенность on Отпечатки (Особенность__hash);


Поиск
Код: sql
1.
2.
3.
declare @Особенность varbinary(max) = ...

select * from [dbo].[Отпечатки] where Особенность__hash = checksum(@Особенность) and Особенность = @Особенность;
...
Рейтинг: 0 / 0
Индекс в БД
    #40053116
Kaktyc007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, почему никак не добавить? Контрольные суммы могут быть одинаковы, а содержимое разное, а значит это увеличит поиск
...
Рейтинг: 0 / 0
Индекс в БД
    #40053120
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kaktyc007
invm, почему никак не добавить? Контрольные суммы могут быть одинаковы, а содержимое разное, а значит это увеличит поиск
Потому что такая структура хранения данных.
Вместо checksum можно использовать

Код: sql
1.
[Особенность__hash] as cast ( hashbytes('md5',[Особенность]) as binary (16) )
...
Рейтинг: 0 / 0
Индекс в БД
    #40053124
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,
  • Я бы делал SHA2_256. В рамках нынешнего населения земли коллизии можно считать достаточно маловероятными, чтобы совпадение хэшей означало совпадение отпечатков. И всего 32 байта.
  • А для индексации столбец разве PERSISTED делать не надо?
...
Рейтинг: 0 / 0
Индекс в БД
    #40053125
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kaktyc007,

Читаем:
Спецификации максимальной емкости для SQL Server

900 байтов для кластеризованного индекса. 1700 для некластеризованного индекса.
А вы туда МАХ пытаетесь впихнуть
...
Рейтинг: 0 / 0
Индекс в БД
    #40053134
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
Я бы делал SHA2_256. В рамках нынешнего населения земли коллизии можно считать достаточно маловероятными, чтобы совпадение хэшей означало совпадение отпечатков. И всего 32 байта.
Показан всего лишь пример. А взять можно что угодно, удовлетворяющее требования ТС к поиску. Даже первые N байт данных.
Это уж пускай он сам экспериментирует.
Ennor Tiegael
А для индексации столбец разве PERSISTED делать не надо?
Не обязательно.
...
Рейтинг: 0 / 0
Индекс в БД
    #40053142
Kaktyc007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
godsql, спасибо, поставил
Код: sql
1.
[Особенность]  VARBINARY (256) NULL,


Индекс создался, время поиска в БД уменьшилось
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Индекс в БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]