Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Использование составного индекса / 14 сообщений из 14, страница 1 из 1
16.02.2018, 11:21
    #39602814
assmsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
Добрый день!

Таблица 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го запроса.


Как заставить использовать индекс, не меняя индексы в таблице А?
...
Рейтинг: 0 / 0
16.02.2018, 11:25
    #39602822
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
assmskИндекс не используется А что же используется тогда?
assmskКак заставить использовать индекс, не меняя индексы в таблице А? Заставить можно, но не факт, что результат вам понравится.
...
Рейтинг: 0 / 0
16.02.2018, 11:25
    #39602823
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
assmsk,

не использется потому, что подхватывает какой-то другой?
...
Рейтинг: 0 / 0
16.02.2018, 12:16
    #39602870
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
assmskВ ней создан составной индексА какие ещё индексы имеются?
...
Рейтинг: 0 / 0
16.02.2018, 13:06
    #39602905
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
assmskКак заставить использовать индекс, не меняя индексы в таблице А?Что вы подразумеваете под "использовать"? Если Clustered Index Seek, то при таком индексе и запросе вы его не получите.
...
Рейтинг: 0 / 0
16.02.2018, 13:11
    #39602912
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
При условии неравенства даты индекс не используется для второго поля - id.
Вы это имели в виду?
...
Рейтинг: 0 / 0
16.02.2018, 13:51
    #39602959
assmsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
Там единственный индекс описанный выше.



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

И уже таблицу B в которой есть все даты джойню с таблицей А по id = id data = data
Время выполнения устраивает , 7 минут против часа.
Но хотелось бы конечно поизящней как то
...
Рейтинг: 0 / 0
16.02.2018, 14:13
    #39602982
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
ну, with ( forceseek ) должно хватить, можно еще и индекс прибить кластерный хинтом.
...
Рейтинг: 0 / 0
16.02.2018, 14:47
    #39603011
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
assmsk,

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

покажите план запроса
Код: sql
1.
2.
3.
4.
5.
SET SHOWPLAN_XML ON;  
  
<Ваш запрос>  
  
SET SHOWPLAN_XML OFF;
...
Рейтинг: 0 / 0
16.02.2018, 14:54
    #39603018
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
Дедушка,

авторсильно сомневаюсь, что сервер при наличии такого индекса на том запросе, что вы показали
а с чего ему не выбирать скан?
...
Рейтинг: 0 / 0
16.02.2018, 15:36
    #39603092
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
assmsk,

дык надо
Код: sql
1.
CREATE CLUSTERED INDEX [ix_id_data] ON A ([id] ASC, [data] ASC)
...
Рейтинг: 0 / 0
16.02.2018, 15:37
    #39603095
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
Владислав Колосовassmsk,

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



авторКак заставить использовать индекс, не меняя индексы в таблице А?
...
Рейтинг: 0 / 0
16.02.2018, 15:46
    #39603113
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
TaPaK,

таки да, но чудес ведь не бывает.
...
Рейтинг: 0 / 0
20.02.2018, 23:25
    #39605144
Mind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование составного индекса
assmskНо хотелось бы конечно поизящней как то
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Select a.* 
from A a
where EXISTS
(
	SELECT *
	FROM B b 
	WHERE a.id = b.id and a.data >= b.data 
)

?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Использование составного индекса / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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