powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
19 сообщений из 19, страница 1 из 1
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628677
Andrea911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить никакими индексами.

Попалось в проверочных вопросах после просмотра обучающего видео, и я прямо озадачилась.
КТо-нибудь может такой пример привести?
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628678
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SELECT * FROM T WHERE SIN(F)=0.5;
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628713
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrea911Попалось в проверочных вопросах после просмотра обучающего видео, и я прямо озадачилась.
Обычно это говорит о том, что надо внимательнее пересмотреть обучающее видео.
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628722
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
Код: sql
1.
SELECT * FROM T WHERE SIN(F)=0.5;

Такой, на самом деле, можно.
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628740
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrea911,
IMHO, почитайте про SARG. Например:

..., что такое SARG аргумент и как оптимизатор его использует?

SARG = Seekable ARGument, такой аргумент, при подстановке которого в условие WHERE позволяет использовать индекс. Например:
Код: sql
1.
SELECT * FROM myTable WHERE id = 3;


сможет использовать индекс по полю id, а :
Код: sql
1.
SELECT * FROM myTable WHERE (id * 3) = 3;


нет, так как потребуется домножить каждое значение id в таблице, что равнозначно полному перебору. NonSARG может здорово затормозить выполнение ваших запросов, особенно часто такие аргументы получаются в результате каста значений кортежа к другому типу.
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628744
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NonSARG может здорово затормозить выполнение ваших запросов, особенно часто такие аргументы получаются в результате каста значений кортежа к другому типу. Кстати приведение ("cast") может быть неявным, это отдельная тема:
Implicit Conversions that cause Index Scans
How expensive are column-side Implicit Conversions?

Data Type Conversion (Database Engine)
Data type precedence (Transact-SQL)
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628752
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrea911Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить никакими индексами.

Попалось в проверочных вопросах после просмотра обучающего видео, и я прямо озадачилась.
КТо-нибудь может такой пример привести?
Таблица из двух текстовых столбцов. Нужно сделать небольшую выборку. Прошу Вас, таки попробуйте.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @i1 int
set @i1 = 190

select
convert(nvarchar(200),column1)+right(convert(nvarchar(300),column2),100) as newcolumn1 -- ntext
,convert(nvarchar(200),column1) as newcolumn2
,convert(nvarchar(300),column2) as newcolumn3
from table1
where substring(convert(nvarchar(200),column1),100,2) like N'ab'
or substring(convert(nvarchar(200),column1),102,2) like N'cd'
or substring(convert(nvarchar(300),column2),@i1,5) like N'x123x' -- а вот тут не знаем, откуда будем читать
or substring(convert(nvarchar(300),column2),200,5) like N'y234y' -- да и тут можно поставить отступ из переменной
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628828
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
WHERE UDF1(field1)=UDF2(field2)
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628881
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmiap
Код: sql
1.
SELECT * FROM T WHERE SIN(F)=0.5;


Такой, на самом деле, можно.Строится индекс по функции SIN()? Я отстал от жизни?
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628895
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapСтроится индекс по функции SIN()? Я отстал от жизни?Создать вычисляемый столбец SIN(F) и построить по нему индекс.
Очень полезная фича, когда индекс прикрутить нужно, а текст запроса изменить невозможно.
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628904
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmiapСтроится индекс по функции SIN()? Я отстал от жизни?Создать вычисляемый столбец SIN(F) и построить по нему индекс.
Очень полезная фича, когда индекс прикрутить нужно, а текст запроса изменить невозможно.Я вроде про вычисляемое поле ничего не говорил.
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628907
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да любое использование в запросе недетерминированной функции - и привет...
Ещё одна тонкость - покрывающий индекс ведь тоже надо исключить, согласно формулировке, верно? а он ускорит обработку, даже если используется чисто как компактная таблица...
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39628988
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем такие сложности, есть же класика:

Код: sql
1.
SELECT * FROM table WHERE datepart(year, data) = 2018
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39629007
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть множество вариантов
1. недетерменированая функция ( where id = rand() )
2. низкоселективное значение - которое оптимизатор никогда не посчитает эфективным искать по индексу (where id > 0 когда все id больше 0)
3. условие вообще без колонок (where getdate() = '20180412')
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39629022
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durakесть множество вариантов
1. недетерменированая функция ( where id = rand() )
2. низкоселективное значение - которое оптимизатор никогда не посчитает эфективным искать по индексу (where id > 0 когда все id больше 0)
3. условие вообще без колонок (where getdate() = '20180412')
1. Очень привратное понимание недетрменированой функции
2. филтрованый индекс (по условию "который невозможно ускорить никакими индексами")
3. ...
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39629023
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarAntзачем такие сложности, есть же класика:

Код: sql
1.
SELECT * FROM table WHERE datepart(year, data) = 2018

Но если создать поле AS datepart(year, data) PERSISTED и по нему индекс, то...
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39629026
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapЯ вроде про вычисляемое поле ничего не говорил.Вы показали запрос, который, как утверждаете, невозможно ускорить индексом.
Так вот, - ускорить таки можно. Или есть ограничения на способы ускорения?
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39629032
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapНо если создать поле AS datepart(year, data) PERSISTED и по нему индекс, то...А вот в данном случае вообще достаточно индекса по data. Оптимизатор достаточно умен, чтобы преобразовать такое предикат в between.
Помнится я вам уже несколько раз показывал пример подобного поведения.
...
Рейтинг: 0 / 0
Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
    #39629105
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmiapЯ вроде про вычисляемое поле ничего не говорил.Вы показали запрос, который, как утверждаете, невозможно ускорить индексом.
Так вот, - ускорить таки можно. Или есть ограничения на способы ускорения?Ускорение. Но не только индексами.invmПомнится я вам уже несколько раз показывал пример подобного поведения.Ну, тупой я. Что поделаешь?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Приведите пример запроса SELECT с фильтром WHERE, который невозможно ускорить индексами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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