Member 12424653 Ответов: 2

Можем ли мы создать индекс на varchar, когда мы его используем и в чем его преимущество в SQL server? Может ли кто-нибудь помочь мне в этом?


Может ли кто-нибудь помочь мне понять, когда создавать индекс на varchar,когда мы его используем?в чем разница между индексом int и varchar?Это лучшая практика или нет

Что я уже пробовал:

То же, что и выше. [править]Afzaal Зишан Ахмед[/правка]

2 Ответов

Рейтинг:
2

Wendelius

Лучше всего создавать индексы для полей или комбинаций полей, которые вы часто используете в качестве условий в своей работе. WHERE пункт. Селективность этих условий должна быть высокой по сравнению с общим количеством строк в таблице.

Решение индексировать или нет основывается не на типе данных, а на типе условия. Как уже упоминалось, селективность является одной из ключевых вещей, но другие соображения связаны с использованием поля в данном состоянии. Как указывалось в первом решении, некоторые поисковые запросы с подстановочными знаками не могут использовать индексы или вообще не имеют смысла их использовать. Аналогичная ситуация возникает, если вы используете функции или выполняете вычисления. Эти виды сравнений не могут использовать индексы, созданные непосредственно на полях.


Рейтинг:
0

jamuro77

Привет,

Конечно, вы можете создать индекс на varchar, особенно на полях, которые, как предполагается, будут часто фильтроваться в вашем приложении. Но самое главное - правильно выбрать поля для создания индекса. Вы должны выбрать наиболее избирательные поля. Если нет, то индексы могут и не использоваться, это будет зависеть от" статистики", но вероятность будет невелика. Например, вы можете использовать индексы, если ваши запросы похожи на:

выберите * из таблицы, где ColumnIndexedName = 'Value'
выберите * из таблицы, где ColumnIndexedName like ' Value%'

Но индекс не будет использоваться, если вы используете:

выберите * из таблицы, где ColumnIndexedName like '%Значение'

Я бы сказал, что единственная разница между использованием int или тип varchar столбцы для построения индексов - это тот факт, что последние будут занимать меньше места для хранения значений, и, возможно, это может сделать запрос быстрее. То же самое относится и к созданию первичных ключей...


Заключить:

1) вы также можете создавать индексы для нескольких полей, объединяя типы int и varchar, уделяя особое внимание фильтрации всегда по первому полю, определенному в индексе. Если вы просто отфильтруете с помощью второго поля индекс использоваться не будет.

2) Старайтесь избегать использования оператора"*". Я имею в виду, используйте только те поля, которые вам нужны в вашем конечном наборе результатов. Если все столбцы могут быть возвращены из индекса, запрос будет "покрыт", и это будет здорово для производительности. Поэтому подумайте о включении новых "дополнительных столбцов" для хранения в индексе, если это возможно, в соответствии с вашими требованиями приложения.


С уважением!


Member 12424653

но varchar может иметь шансы на дублирование значений в столбце, если у него есть операторы более 2 строк типа " is "или"are", а индекс должен быть уникальным значением. как мы можем избежать их?

jamuro77

Индексы могут быть "уникальными"или" не уникальными". Если вы хотите иметь уникальные значения в одном поле (или комбинации полей), вы должны создать "уникальный" индекс для этих полей. В дополнение к этому вы также можете создавать "уникальные" ограничения для столбцов.