powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема соединения двух таблиц (26 и 4 млн строк)
39 сообщений из 39, показаны все 2 страниц
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018626
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте!
Столкнулся с непонятной для меня проблемой, когда не могу сджойнить пару таблиц. Уже три дня перебираю различные варианты, пока что успеха не достиг. Это повергает в уныние.
Оптимизатор по умолчанию выбирает LOOP, но и принудительный перевод в HASH/MERGE не даёт результата даже при ограничении выборки, не говоря уже о полном наборе данных в таблицах :'(

Преднастройки:
  • SQL Server Microsoft SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64) Jun 15 2019 00:26:19 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)
  • БД в режиме совместимости SQL Server 2017 (140)
  • Статистики таблиц запроса пересчитаны с FULLSCAN
Таблицы:
В кабинетах, работающих по расписанию, производится отпуск услуг.

Таблица ServicePointScheduleEveryDay с информацией о рабочих по расписанию интервалах кабинетов на каждый календарный день. Интервалы не пересекаются. Количество строк за всё время 28 206 685.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE staging.ServicePointScheduleEveryDay
(
	ServicePointId dbo.SD_ID NOT NULL,	--кабинет 
	[DayOfWeek] dbo.SD_ID NOT NULL,		--номер дня недели
	ScheduleId dbo.SD_ID NOT NULL,		--id расписания
	StartDateTime datetime NULL,		--начало рабочего интервала кабинета в конкретную календарную дату
	EndDateTime datetime NULL,			--конец рабочего интервала кабинета в конкретную календарную дату
	
	CONSTRAINT [PK_ServicePointScheduleEveryDay] PRIMARY KEY CLUSTERED 
	(
		[ServicePointId] ASC,
		[StartDateTime] ASC,
		[EndDateTime] ASC
	)
) 


Пример данных:


Таблица VScheduleItem с информацией об отпусках услуг, можно считать их интервалами занятости. Количество строк за всё время: 3 894 942.
Относительно интервалов доступности интервалы занятости могут:
    совпадать с размером рабочей ячейки кабинета
    занимать несколько рабочих ячеек кабинета (не обязательно целых)
    находиться внутри рабочей ячейки
Параллельно может проходить несколько интервалов занятости!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE staging.VScheduleItem
(
	[Id] [bigint] IDENTITY(1,1) NOT NULL,
	ServicePointId dbo.SD_ID NULL,		--кабинет
	StartDateTime datetime NOT NULL,	--начало отпуска услуги (на одно время может приходиться несколько услуг) / интервала занятости кабинета в конкретную календарную дату 
	EndDateTime datetime NULL			--конец отпуска услуги (на одно время может приходиться несколько услуг) / интервала занятости кабинета в конкретную календарную дату 
	
	CONSTRAINT [PK_VScheduleItem] PRIMARY KEY NONCLUSTERED 
	(
		[Id] ASC
	)	
)

CREATE CLUSTERED INDEX pr_id ON staging.VScheduleItem
(
	ServicePointId ASC,
	StartDateTime ASC,
	EndDateTime ASC
)


Пример данных:


Задача
Для каждого из рабочих интервалов кабинетов на каждый календарный день (ServicePointScheduleEveryDay) определить количество приходящихся интервалов занятости (VScheduleItem).

Проблема/предпринимаемые попытки решения
Попытка 1. Изначально пытался зачем-то вставлять результат в новую таблицу ServicePointScheduleEDScheduleItemCount, где поля совпадают с таблицей ServicePointScheduleEveryDay, плюс добавляется новое поле ScheduleItemCount.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
INSERT INTO [staging].[ServicePointScheduleEDScheduleItemCount]
           ([ServicePointId]
           ,[DayOfWeek]
           ,[ScheduleId]
           ,[StartDateTime]
           ,[EndDateTime]
           ,[ScheduleItemCount])
	SELECT 
		sps.ServicePointId
		,sps.DayOfWeek
		,sps.ScheduleId
		,sps.StartDateTime
		,sps.EndDateTime
		,SUM(CASE WHEN si.StartDateTime IS NOT NULL THEN 1 ELSE 0 END) ScheduleItemCount
	FROM 
		staging.ServicePointScheduleEveryDay sps
		LEFT MERGE/*HASH*/ JOIN staging.VScheduleItem si ON 
			sps.ServicePointId = si.ServicePointId 
			AND sps.StartDateTime < si.EndDateTime AND sps.EndDateTime > si.StartDateTime --условие пересечения временных интервалов
	WHERE sps.ServicePointId = 5 --даже при ограничении на один кабинет результат не удаётся получить
	GROUP BY 
		sps.ServicePointId
		,sps.DayOfWeek
		,sps.ScheduleId
		,sps.StartDateTime
		,sps.EndDateTime


Напомню, в левой таблице 28 млн строк, в правой таблице - 4 млн. Пытался ограничить в WHERE для одного кабинета (ServicePointId = 5), при таком раскладе в левой таблице 376 852 строк, в правой - 87 832. Дождаться результата выполнения запроса не удаётся. Смена LEFT на INNER (хоть это и не в интересах моей задачи) положительного результата не даёт. По умолчанию оптимизатор выбирает LOOP JOIN и ожидает получить миллиарды записей. Принудительный хинт в MERGE/HASH успеха не дают.

В попытках 2 и 3 временно отказался от результата в виде количества приходящихся интервалов занятости, а просто хотел определить был ли занят рабочий интервал или нет: в таблицу ServicePointScheduleEveryDay добавил битовое поле IsBusySegment.

Попытка 2. Обновлять ServicePointScheduleEveryDay.IsBusySegment
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
UPDATE ed
SET IsBusySegment = 1 
FROM
	staging.ServicePointScheduleEveryDay ed
	INNER MERGE JOIN staging.VScheduleItem sps ON
			sps.ServicePointId = ed.ServicePointId 
			AND (sps.StartDateTime < ed.EndDateTime) 
			AND (sps.EndDateTime > ed.StartDateTime)
			AND sps.ServicePointId = 5 		
WHERE 
	ed.ServicePointId = 5



Попытка 3. Обновлять ServicePointScheduleEveryDay.IsBusySegment для случаев WHERE EXISTS записи в таблице интервалов занятости. При таком раскладе оптимизатор выбирает LOOP JOIN, повлиять на выбор способа не нашёл.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018658
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed
не могу сджойнить пару таблиц
Расшифруйте.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018659
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
Расшифруйте

Добрый день.

Например, код попытки 2, которая уже не отвечает исходной задаче (считает только занятость интервала, а не количество отпускаемых в интервале услуг) не выполняется ни за какое адекватное время (максимум, сколько ждал - 100 минут) при том, что там уже и вместо LEFT JOIN используется INNER и только по одному кабинету ServicePointId = 5. Ожидаемый план запроса получается, на мой взгляд, красивый. В обоих случаях IndexSeek, ожидаемое количество строк корректное.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018661
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed,

Проблема именно с update? Если запрос сериализовать во времянку, эффект тот же?

Какие блокировки были/есть во время выполнения запроса?

С maxdop 1 эффект тот же?

упд. Ну и посмотрите загрузку cpu во время выполнения запроса.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018662
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Проблема именно с update?

Не только. SELECT с выводом на экран или в файл также не отрабатывает за адекватное время (результата выполнения я не дождался ни разу, даже при ограничении на 1 кабинет)
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018665
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed,

Блокировки проверяли? Может просто одну из таблиц кто-то/что-то блокирует.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018670
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env, спасибо за рекомендации.
Попробовал с OPTION (MAXDOP 1). Уже более 10 минут выполняется по 1 кабинету, результат не получен.
Блокировки отсутствуют.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018672
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Если запрос сериализовать во времянку, эффект тот же?

Поясните этот момент, пожалуйста.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018676
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavifed,

а вот такая картина изначально была, без OPTION(MAXDOP 1)
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018682
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed,

Ваши красивые картинки малоинформативны.
Если запрос выполняется "вечно", смотрите его ожидания в sys.dm_waiting_tasks, или в sys.dm_exec_requests.
Или установите себе sp_whoisactive
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018683
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
sys.dm_waiting_tasks
sys.dm_os_waiting_tasks
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018689
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
Или установите себе sp_whoisactive

Спасибо, установил, выполнил
Код: sql
1.
EXEC sp_whoisactive @get_locks = 1, @get_task_info = 1, @get_transaction_info = 1



В поле locks для своего запроса получаю:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<Database name="demo_30b">
  <Locks>
    <Lock request_mode="S" request_status="GRANT" request_count="1" />
  </Locks>
  <Objects>
    <Object name="ServicePointScheduleEveryDay" schema_name="staging">
      <Locks>
        <Lock resource_type="OBJECT" request_mode="IX" request_status="GRANT" request_count="9" />
        <Lock resource_type="PAGE" page_type="*" index_name="PK_ServicePointScheduleEveryDay" request_mode="U" request_status="GRANT" request_count="173" />
      </Locks>
    </Object>
    <Object name="VScheduleItem" schema_name="staging">
      <Locks>
        <Lock resource_type="OBJECT" request_mode="IS" request_status="GRANT" request_count="1" />
      </Locks>
    </Object>
  </Objects>
</Database>



В поле wait_info - NULL.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018888
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed,

авторWHERE для одного кабинета (ServicePointId = 5), при таком раскладе в левой таблице 376 852 строк, в правой - 87 832


Конечно же это не так, предикат ограничивает поиск только в одной из таблиц. Более того, серверу может быть неизвестна корректная оценка кардинальности. Если Вы указали фактические значения, то сравните с теми, которые предоставлены в ожидаемом плане запроса.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018922
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
количество строк в ожидаемом плане совпадает с реальным.

P.S. ненамеренно оставил запрос работать в фоновой вкладке. По одному кабинету (ServicePointId = 5) запрос отработал за 3 часа 15 минут
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018931
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что, за 3 часа не могли посмотреть, чего сессия ждет?
запустите снова и посмотрите в sys.dm_os_waiting_tasks
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018938
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed
Напомню, в левой таблице 28 млн строк, в правой таблице - 4 млн. Пытался ограничить в WHERE для одного кабинета (ServicePointId = 5), при таком раскладе в левой таблице 376 852 строк, в правой - 87 832. Дождаться результата выполнения запроса не удаётся. Смена LEFT на INNER (хоть это и не в интересах моей задачи) положительного результата не даёт. По умолчанию оптимизатор выбирает LOOP JOIN и ожидает получить миллиарды записей. Принудительный хинт в MERGE/HASH успеха не дают.

у меня была вроде аналогичная проблема - в каждой из таблиц было немного строк, а джоин безбожно тупил, в итоге мне пришло в голову, что он пытается мне выдать все комбинации, потому что вы сами говорите, что в один период дат одной таблицы может быть несколько совпадений из другой таблицы, т.е. максимальное кол-во записей, которое потенциально может выдать селект - это 376 852 * 87 832 = ~33 млрд

и вот бедный сервер и перелопачивает все комбинации, сверяя попадание периода дат для каждого случая

в моем случае, насколько я помню, все в итоге решилось довольно просто, но не помню что я сделал, то ли условие в джоине поменял, то ли структуру БД

да и проблема эта была у меня, когда я джоинил не по FK полю, а вот примерно как у вас, периоды дат
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018941
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed,

1. Если версия позволяет - запустите с live query и посмотрите на реальный план выполнения.
2. merge join по неравенству выглядит несколько странно, покажите план без хинтования
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018943
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123,
Получаю 129 строк с WITE_TYPE = 'CXPACKET'.
Ранее выше писал, что sp_whoisactive возвращает поле wait_info NULL.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018945
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed,

Повторюсь - ваши картинки неинформативны.
Не хотите сами разбираться с ожиданиями (предположительно) - тогда запустите запрос еще раз и покажите актуальный план выполнения в формате sqlplan, а не картинкой.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018947
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. попробуйте связать таблицы ServicePointScheduleEveryDay и VScheduleItem напрямую, например добавив в VScheduleItem поле ServicePointScheduleEveryDayId + FK + индекс по полю ServicePointScheduleEveryDayId
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018948
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
2. merge join по неравенству выглядит несколько странно, покажите план без хинтования

Без хинтования получаю LOOP в Estimation плане.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018949
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed
Yasha123,
Получаю 129 строк с WITE_TYPE = 'CXPACKET'.


А какие ожидания с maxdop 1 ?

CXPACKET это ожидание связанное с параллелизмом. Например, у вас перекос в распределении данных по потокам.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018951
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Если версия позволяет - запустите с live query и посмотрите на реальный план выполнения.


invm
Повторюсь - ваши картинки неинформативны.
Не хотите сами разбираться с ожиданиями (предположительно) - тогда запустите запрос еще раз и покажите актуальный план выполнения в формате sqlplan, а не картинкой.


Ок, вернусь к изначальному запросу и попробую выполнить его с live query. Спасибо!
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018955
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
А какие ожидания с maxdop 1 ?

При использовании OPTION (MAXDOP 1) представление sys.dm_os_waiting_tasks возвращает пустой набор.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018958
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так криво он поделил работу,
видите же, что другие thread ждут работающего, которому досталось больше.
вам предлагали при maxdop = 1 запускать,
попробуйте снова и посмотрим, что там за ожидания, исключим CXPACKET
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018972
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
pavifed,

Повторюсь - ваши картинки неинформативны.
Не хотите сами разбираться с ожиданиями (предположительно) - тогда запустите запрос еще раз и покажите актуальный план выполнения в формате sqlplan, а не картинкой.

Приложил файл. Посмотрите, пожалуйста.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018974
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123
видите же, что другие thread ждут работающего, которому досталось больше.
вам предлагали при maxdop = 1 запускать,
попробуйте снова и посмотрим, что там за ожидания, исключим CXPACKET


за минуту до вашего комментария успел ответить другому участнику:
При использовании OPTION (MAXDOP 1) представление sys.dm_os_waiting_tasks возвращает пустой набор.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018984
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и где тут "актуальных строк столько же, сколько оценочных"?
кривая оценка числа строк, криво же распределил работу между threads.
все ждали одного.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40018999
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a вообще планы какие-то урезанные
QueryTimeStats напрочь отсутствует.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019028
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed
Приложил файл.
И каждый по 3 часа выполнялся?

Планы не соответствуют опубликованным картинкам.
И какие-то урезанные. QueryTimeStats может и не быть, ибо появилось в 2017 CU3, а у вас почти что RTM. Но WaitStats появилось в 2016 SP1, а нету.

Откуда планы брали?
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019038
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123,

я прислал выше куцый план, к сожалению. Вот план после выполнения запроса.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019060
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот в некуцем плане есть и нехилый индекс спул
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019063
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123,

Как это лечится? (смущённый смайл)
Есть типовые пути решения?
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019072
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed,

попробуйте, там спулирование вроде не для HP добавляется, по сути он должен убрать его из плана.
Код: sql
1.
option (no_performance_spool)
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019074
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,

Кажется, не помогло. В Live сразу отображается (при option (no_performance_spool))
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019090
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed,

кароче ему не хватает индекса на VSheduleItem вида
Код: sql
1.
create index ix on [staging].[VSheduleItem] ([StartDateTime]) include ([EndDateTime])



но делать это на такой большой таблице возможно не камильфо.

у Вас в плане изначальный предикат правого входа это IndexSeek на VScheduleItem по предикату ServicePointId = Scalar Operator((5))
оценка такого предиката возвращает оценочное кол-во строк в 87832.

поскольку потом дополнительно нужно фильтроваться по предикатам неравенства сервер решает построить индекс.
но вот только он считает вполне нормальным что левый вход ему дает набор в 376852 строки и можно столько раз посоздавать индекс.

Можете попробовать заскриптовать оценочный план который не содержит IndexSpool и применить его в виде PlanGuide
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019103
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff


кароче ему не хватает индекса на VSheduleItem вида
Код: sql
1.
create index ix on [staging].[VSheduleItem] ([StartDateTime]) include ([EndDateTime])



но делать это на такой большой таблице возможно не камильфо.

да ладно, там девелопер, можно онлайново создать и с компрессией
Код: sql
1.
2.
create index ix on [staging].[VSheduleItem] ([StartDateTime]) include ([EndDateTime])
with(online = on, data_compression = page)
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019110
pavifed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123
да ладно, там девелопер, можно онлайново создать и с компрессией
Код: sql
1.
2.
create index ix on [staging].[VSheduleItem] ([StartDateTime]) include ([EndDateTime])
with(online = on, data_compression = page)


Добавил такой индекс. Выполняю запрос, вижу, что по-прежнему используется кластерный индекс pr_id, а не новый ix.
...
Рейтинг: 0 / 0
Проблема соединения двух таблиц (26 и 4 млн строк)
    #40019113
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pavifed,

Перепишите так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
UPDATE ed
SET IsBusySegment = 1 
FROM
    staging.VScheduleItem sps inner hash join
	staging.ServicePointScheduleEveryDay ed ON
			sps.ServicePointId = ed.ServicePointId 
			AND (sps.StartDateTime < ed.EndDateTime) 
			AND (sps.EndDateTime > ed.StartDateTime)
WHERE sps.ServicePointId = 5

Спул уйдет.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема соединения двух таблиц (26 и 4 млн строк)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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