Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использование составного индекса  [new]
assmsk
Member

Откуда:
Сообщений: 169
Добрый день!

Таблица A

Содержит
id bigint,
data int,
summa money

В ней создан составной индекс
CREATE CLUSTERED INDEX [ix_id_data] ON A ([data] ASC,[id] ASC)

Индекс не используется когда дата не строго равна:
Select a.* from A a
inner join B b on a.id = b.id and a.data >= b.data

Когда
Select a.* from A a
inner join B b on a.id = b.id and a.data = b.data
все работает прекрасно используя индекс, но нужно получить именно результат 1го запроса.


Как заставить использовать индекс, не меняя индексы в таблице А?
16 фев 18, 11:21    [21196205]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
assmsk
Индекс не используется
А что же используется тогда?
assmsk
Как заставить использовать индекс, не меняя индексы в таблице А?
Заставить можно, но не факт, что результат вам понравится.
16 фев 18, 11:25    [21196230]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
assmsk,

не использется потому, что подхватывает какой-то другой?
16 фев 18, 11:25    [21196232]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20206
assmsk
В ней создан составной индекс
А какие ещё индексы имеются?
16 фев 18, 12:16    [21196431]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
assmsk
Как заставить использовать индекс, не меняя индексы в таблице А?
Что вы подразумеваете под "использовать"? Если Clustered Index Seek, то при таком индексе и запросе вы его не получите.
16 фев 18, 13:06    [21196634]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
При условии неравенства даты индекс не используется для второго поля - id.
Вы это имели в виду?
16 фев 18, 13:11    [21196664]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
assmsk
Member

Откуда:
Сообщений: 169
Там единственный индекс описанный выше.



В общем сделал через лютое извращение,
Создал таблицу 'C' с датами от минимальной даты в таблице B до сегодня.
Заджойнил ее с таблицой B по условию c.data >= b.data

И уже таблицу B в которой есть все даты джойню с таблицей А по id = id data = data
Время выполнения устраивает , 7 минут против часа.
Но хотелось бы конечно поизящней как то
16 фев 18, 13:51    [21196837]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
ну, with ( forceseek ) должно хватить, можно еще и индекс прибить кластерный хинтом.
16 фев 18, 14:13    [21196921]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
assmsk,

вы на вопрос "что используется вместо кластерного" так и не ответили.
сильно сомневаюсь, что сервер при наличии такого индекса на том запросе, что вы показали
выбирает сканирование таблицы.

покажите план запроса
SET SHOWPLAN_XML ON;  
  
<Ваш запрос>  
  
SET SHOWPLAN_XML OFF;
16 фев 18, 14:47    [21197063]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Дедушка,

автор
сильно сомневаюсь, что сервер при наличии такого индекса на том запросе, что вы показали

а с чего ему не выбирать скан?
16 фев 18, 14:54    [21197097]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
assmsk,

дык надо
CREATE CLUSTERED INDEX [ix_id_data] ON A ([id] ASC, [data] ASC)
16 фев 18, 15:36    [21197284]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Владислав Колосов
assmsk,

дык надо
CREATE CLUSTERED INDEX [ix_id_data] ON A ([id] ASC, [data] ASC)


автор
Как заставить использовать индекс, не меняя индексы в таблице А?
16 фев 18, 15:37    [21197293]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
TaPaK,

таки да, но чудес ведь не бывает.
16 фев 18, 15:46    [21197328]     Ответить | Цитировать Сообщить модератору
 Re: Использование составного индекса  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
assmsk
Но хотелось бы конечно поизящней как то

Select a.* 
from A a
where EXISTS
(
	SELECT *
	FROM B b 
	WHERE a.id = b.id and a.data >= b.data 
)
?
20 фев 18, 23:25    [21206566]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить