Отфильтрованный индекс в SQL Server 2008 - PullRequest
0 голосов
/ 22 июля 2010

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

SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON

Если я включу вышеуказанные функции, какой будет эффект? Это вызывает какие-либо проблемы? есть ли другой лучший вариант?

Заранее спасибо

1 Ответ

2 голосов
/ 22 июля 2010

Ни один из трех пунктов, которые вам необходимы для правильного использования вашего индекса. Самым большим фактором, который определяет, будет ли индекс использоваться или нет, является построение запроса и его оценка механизмом оптимизации запросов.

Но, чтобы продолжить то, что вы воспитали, давайте проверим использование трех:

SET CONCAT_NULL_YIELDS_NULL ON

Давайте возьмем это утверждение SET @Name = @FirstName + ' ' + @LastName

Если @FirstName равно NULL или @LastName равно NULL, тогда ваше @Name будет равно NULL. Если вам не нужно это поведение - вы хотите, чтобы NULL обрабатывался как пустая строка, тогда вы SET CONCAT_NULL_YIELDS_NULL ON

SET ANSI_PADDING ON

Это будет устаревшим в будущем. На SQL Server это по умолчанию включено. На самом деле, в более новых версиях SQL Server вы даже не можете выключить его.

Это влияет на хранение данных в столбце varchar - например, если вы включите его, то значение TEST будет сохранено вместе с завершающим пробелом, если вы установите его в OFF, конечные пробелы будут удалены. То же самое относится и к конечным нулям в столбце VarBinary.

SET ANSI_WARNINGS ON

Это для группировки и суммирования. Если у вас есть значение NULL в любой агрегатной функции, и вы хотите знать, что есть значение NULL, тогда вы устанавливаете его на ON. Если вам не важно знать, что значение NULL было исключено из агрегата, установите для этого параметра значение OFF.

...