Индекс varchar на MS SQL Server 2005
Мне нужно индексировать поле varchar в моей таблице в MS SQL Server 2005, но мне не ясно, как это сделать. Если я попытаюсь добавить некластеризованный индекс в поле, он говорит: "Столбец" xxxx "в таблице" mytable "имеет тип, который недопустим для использования в качестве ключевого столбца в индексе"
В моей таблице есть идентификатор int с автоматическим инкрементом, который задан как первичный ключ в таблице. Если я устанавливаю это свойство как индекс, а затем добавляю свой столбец varchar как "включенный столбец", индекс проходит. Но я не уверен, что хочу - я хочу, чтобы иметь возможность искать таблицу на основе только поля varchar, и мое понимание индексов состояло в том, что все индексированные элементы должны были быть предоставлены, чтобы фактически увидеть ускорение в запросе, но я не хочу включать идентификатор int (потому что я не знаю, что это такое, во время данного запроса).
Я пытаюсь сделать это неправильно? Будет ли ID + мой varchar в качестве включенного столбца выполнить то, что я ищу?
Является ли ваш varchar(max)
? Я думаю, что они не могут использоваться в индексе.
В противном случае отправьте свой оператор CREATE TABLE
, обычно нет проблем с добавлением varchar
к индексу.
Я предполагаю, что ваш - это столбец VARCHAR (MAX), который, как говорит ошибка, является типом данных invalida для индекса. Предложение: создайте вычисленный столбец, который является хэш-значением столбца VARCHAR (MAX) (например, с помощью функции HashBytes), затем создайте индекс только для расчетного столбца. Затем в условии поиска (например, предложение WHERE) вашего SQL DML вы должны использовать как значение VARCHAR (MAX), так и хэш вашего значения VARCHAR (MAX) в соответствующих столбцах в таблице. Может быть хорошей идеей инкапсулировать хеширование значений поиска в хранимую процедуру "помощник".
Нет, столбец ID + varchar не будет работать. Это отлично подойдет для запросов, в которых вы просматриваете идентификатор, и только выберите идентификатор или/и столбец varchar - тогда у вас будет индекс покрытия, и все может быть восстановлено только путем просмотра индекса.
Я предполагаю, что у вас есть кластеризованный индекс в столбце ID как первичный ключ. Затем вам нужно будет создать некластеризованный индекс в столбце varchar, что должно быть возможным. Некластеризованный индекс также автоматически включает идентификатор.
Также помните, что индекс будет полезен только для запросов, таких как WHERE VarcharColumn = 'xyz' и WHERE VarcharColumn LIKE 'xyz%'.
Это не поможет для запросов LIKE "% xyz%" и "% xyz".
Установка столбца в качестве первичного ключа по умолчанию создает кластеризованный индекс, поэтому вам не нужно создавать еще один индекс INT + VARCHAR.
То, что вы ищете, - это индекс только для вашего VARCHAR - без + INT, поскольку ваш первичный ключ неявно включен - после того, как SQL Server сможет найти фактическую строку при выполнении поиска индекса. Однако существует ограничение, я полагаю, что общий размер столбцов индекса должен быть < 900 байт (по крайней мере, это было с SQL Server 2000). Как долго ваш VARCHAR?
Вам не нужно включать поле varchar в первичный ключ для его индексации. Чтобы создать индекс, просто измените таблицу в Management Studio, нажмите кнопку "Управление индексами и ключами" и нажмите "Добавить", чтобы добавить новый индекс. Затем выберите поле VARCHAR. Не должно быть никаких проблем.
- Вопросы
- Sql-server-2005
- Индекс varchar на MS SQL Server 2005