Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 OR в Where фильтрованного индекса  [new]
OR?
Guest
Можно ли указать условие or в where фильтрованного индекса?
2 мар 16, 10:51    [18886256]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вы боитесь попробовать ?

BOL - CREATE INDEX

WHERE <filter_predicate>
Creates a filtered index by specifying which rows to include in the index. The filtered index must be a nonclustered index on a table. Creates filtered statistics for the data rows in the filtered index.

The filter predicate uses simple comparison logic and cannot reference a computed column, a UDT column, a spatial data type column, or a hierarchyID data type column. Comparisons using NULL literals are not allowed with the comparison operators. Use the IS NULL and IS NOT NULL operators instead.

Here are some examples of filter predicates for the Production.BillOfMaterials table:

WHERE StartDate > '20040101' AND EndDate <= '20040630'

WHERE ComponentID IN (533, 324, 753)

WHERE StartDate IN ('20040404', '20040905') AND EndDate IS NOT NULL
2 мар 16, 10:53    [18886274]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
OR?
Guest
Проблема в том, чтобы создать фильтрованный индекс с таким условием:
(where a = 2 or a is null)
2 мар 16, 10:53    [18886277]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
Glory
Member

Откуда:
Сообщений: 104751
OR?
Проблема в том, чтобы создать фильтрованный индекс с таким условием:

И какая именно проблема ?
2 мар 16, 10:55    [18886289]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
OR?
Guest
Glory
OR?
Проблема в том, чтобы создать фильтрованный индекс с таким условием:

И какая именно проблема ?


Вот такая:
автор
Msg 156, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'or'.
2 мар 16, 10:57    [18886304]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
Glory
Member

Откуда:
Сообщений: 104751
OR?
Вот такая:
автор
Msg 156, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'or'.

Ну так напишите правильный синтаксис
2 мар 16, 10:58    [18886309]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
OR?
Guest
вот код:

CREATE UNIQUE NONCLUSTERED INDEX [idx_] ON [dbo].[Table]
(
	[code] ASC,
	[Phone] ASC
)
WHERE ([Phone] IS NOT NULL AND ([val] in (2) or [val] is null ))
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
2 мар 16, 10:59    [18886311]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
OR?
Проблема в том, чтобы создать фильтрованный индекс с таким условием:
(where a = 2 or a is null)
А что это за скобки такие?
2 мар 16, 11:02    [18886348]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
Glory
Member

Откуда:
Сообщений: 104751
Значит это не The filter predicate uses simple comparison logic
2 мар 16, 11:03    [18886357]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
OR?
вот код:

CREATE UNIQUE NONCLUSTERED INDEX [idx_] ON [dbo].[Table]
(
	[code] ASC,
	[Phone] ASC
)
WHERE ([Phone] IS NOT NULL AND ([val] in (2) or [val] is null ))
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
Что такое [val]?
2 мар 16, 11:03    [18886362]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
iap
OR?
вот код:

CREATE UNIQUE NONCLUSTERED INDEX [idx_] ON [dbo].[Table]
(
	[code] ASC,
	[Phone] ASC
)
WHERE ([Phone] IS NOT NULL AND ([val] in (2) or [val] is null ))
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

Что такое [val]?
Извините. Глупый вопрос.
2 мар 16, 11:04    [18886373]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
OR?
Guest
iap
OR?
Проблема в том, чтобы создать фильтрованный индекс с таким условием:
(where a = 2 or a is null)
А что это за скобки такие?


Посмотрите второй пример, он развернутый.
Очень не хочется делать вычисляемое поле.
Можно было бы использовать in, если бы не условие по NULL.
2 мар 16, 11:04    [18886377]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
iap
Извините. Глупый вопрос.
Хотя такого поля в индексе нет.
2 мар 16, 11:06    [18886391]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
Glory
Member

Откуда:
Сообщений: 104751
https://www.brentozar.com/archive/2013/11/what-you-can-and-cant-do-with-filtered-indexes/
2 мар 16, 11:06    [18886402]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
OR?
iap
пропущено...
А что это за скобки такие?


Посмотрите второй пример, он развернутый.
Очень не хочется делать вычисляемое поле.
Можно было бы использовать in, если бы не условие по NULL.
Какая разница, развёрнутый пример или свёрнутый?
Почему внутри скобок оказалось ключевое слово WHERE?
2 мар 16, 11:07    [18886409]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
OR?
Guest
iap,

фильтрацию можно делать по полю, которого нет в сегменте индекса.

Индекс по отдельным условиям ([val] = (2) и [val] is null) работают.
2 мар 16, 11:09    [18886426]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
OR?
Guest
iap
OR?
пропущено...


Посмотрите второй пример, он развернутый.
Очень не хочется делать вычисляемое поле.
Можно было бы использовать in, если бы не условие по NULL.
Какая разница, развёрнутый пример или свёрнутый?
Почему внутри скобок оказалось ключевое слово WHERE?


Where не внутри скобок во втором примере.
Смотрите внимательно
2 мар 16, 11:10    [18886433]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
OR?,

ссылку уже одну дали... на ещё
CREATE INDEX
автор
Creates a filtered index by specifying which rows to include in the index. The filtered index must be a nonclustered index on a table. Creates filtered statistics for the data rows in the filtered index.
The filter predicate uses simple comparison logic and cannot reference a computed column, a UDT column, a spatial data type column, or a hierarchyID data type column. Comparisons using NULL literals are not allowed with the comparison operators. Use the IS NULL and IS NOT NULL operators instead. Comparisons and IN lists can only be combined using the AND operator.


автор
Очень не хочется делать вычисляемое поле.

это предложение тоже отпадает.

[val] IN (ISNULL(a,0),2) попробовать можно
2 мар 16, 11:14    [18886463]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
OR?
iap
пропущено...
Какая разница, развёрнутый пример или свёрнутый?
Почему внутри скобок оказалось ключевое слово WHERE?


Where не внутри скобок во втором примере.
Смотрите внимательно
Я не только внимательно посмотрел, но и процитировал ваш пост, про который и спрашивал.
2 мар 16, 11:15    [18886472]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
OR?
Guest
iap
OR?
пропущено...


Where не внутри скобок во втором примере.
Смотрите внимательно
Я не только внимательно посмотрел, но и процитировал ваш пост, про который и спрашивал.


Молодец
Если этот вопрос настолько важен, то в первом посте была описка.
Воспринимайте как:
where (a = 2 or a is null)



TaPaK,

спасибо. Пробовал, к сожалению функции не поддерживаются в фильтрованных индексах. Так же как и вычисляемые поля.
Видимо данный кейс невозможно реализовать в текущей версии SQL Server-а, увы.
Если есть еще идеи, с удовольствием попробую.
2 мар 16, 11:19    [18886509]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
stdvb
Member

Откуда:
Сообщений: 41
по ссылке выше:

автор Aaron Bertrand January 3, 2014 | 3:42 pm

Just wanted to point out that OR is not allowed in the grammar. So this clause:

WHERE Status = ‘Open’ OR Status = ‘Shipping’

could only be used if it were changed to:

WHERE Status IN (‘Open’,‘Shipping’)
2 мар 16, 11:19    [18886512]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
OR?
Guest
stdvb
по ссылке выше:

автор Aaron Bertrand January 3, 2014 | 3:42 pm

Just wanted to point out that OR is not allowed in the grammar. So this clause:

WHERE Status = ‘Open’ OR Status = ‘Shipping’

could only be used if it were changed to:

WHERE Status IN (‘Open’,‘Shipping’)


А вы с null это попробуйте.
2 мар 16, 11:20    [18886524]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
OR?,

тут может вопрос не в том что нельзя, а в том что может такой индекс нафиг не нужен...
2 мар 16, 11:21    [18886533]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
stdvb
Member

Откуда:
Сообщений: 41
OR?

А вы с null это попробуйте.

Просто привел как подтверждение что OR нельзя использовать.
2 мар 16, 11:22    [18886537]     Ответить | Цитировать Сообщить модератору
 Re: OR в Where фильтрованного индекса  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
А если два индекса создать?
2 мар 16, 11:22    [18886544]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить