Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Join маленькой таблицы с огромной / 17 сообщений из 17, страница 1 из 1
31.01.2018, 15:19
    #39594074
assmsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
Добрый день!
Запрос умирает, пробовал через join, apply все тщетно.

Таблица А: (name_ varchar(50), dd_int int) около 500 000 записей.

Таблица В: (name_ varchar(50), dd_int int, amount numeric(20,2) ) Чуть меньше 3 миллиардов
В таблице В индекс:

CREATE CLUSTERED INDEX [ix_indexes_dd_name] ON B
(
[dd_int ] ASC,
[name_ ] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DATA1]
GO



Вот вообщем к таблице А подтянуть поле amount из таблицы В просто беда. Часами висит запрос и ничего.


SELECT A.name_,A.dd_int, B.amount
FROM A A INNER JOIN B B ON A.name_ = B.name_ and A.dd_int = B.dd_int

Какие есть варианты? пс - как то изменить индексы в "В" возможности нет.
...
Рейтинг: 0 / 0
31.01.2018, 15:22
    #39594078
assmsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
Вопрос решился, сервак лежал просто...)) За 15 минут выгрузил, но может есть все же варианты ускорить?
...
Рейтинг: 0 / 0
31.01.2018, 15:23
    #39594084
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
План запроса покажите.
...
Рейтинг: 0 / 0
31.01.2018, 15:25
    #39594085
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
assmsk,

а в A такой же индекс?
...
Рейтинг: 0 / 0
31.01.2018, 15:26
    #39594086
assmsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
TaPaKassmsk,

а в A такой же индекс?

Да
...
Рейтинг: 0 / 0
31.01.2018, 15:27
    #39594088
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
assmsk,

ну тут план кончено... а так должно было merge поставить
...
Рейтинг: 0 / 0
31.01.2018, 15:32
    #39594097
assmsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
...
Рейтинг: 0 / 0
31.01.2018, 15:33
    #39594099
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
assmsk,

а не кртинкой
...
Рейтинг: 0 / 0
31.01.2018, 16:38
    #39594160
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
assmskTaPaKassmsk,

а в A такой же индекс?

ДаСудя по плану, таки нет.

Если на таблицах кластерные индексы с одинаковым первым столбцом dd_int, то, по крайней мере в теории, ускорить можно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
 A.name_, A.dd_int, B.amount
from
 A join
 (
  (select min(dd_int), max(dd_int) from A) t(dd_min, dd_max) join
  B on B.dd_int between t.dd_min and t.dd_max
 ) on B.dd_int = A.dd_int and B.name_ = A.name_;
...
Рейтинг: 0 / 0
31.01.2018, 16:44
    #39594163
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
там ещё и скаляр какой-то, из за него hash я так понимаю, так что не всё там однозначно с описанием
...
Рейтинг: 0 / 0
31.01.2018, 18:34
    #39594290
Join маленькой таблицы с огромной
invm,

а почему ты решил, что 500000 записей из А не охватывают все записи из B ?
где автор сказал, что связь "один-к-одному"?
там, скорее всего, "один-ко-многим" по принципу мастер-детэйл.
никаких дополнительный условий фильтрации данных из таблицы А нет, поэтому условием по мин-макс ты никак не ограничишь объем данных, возвращаемых из таблицы B - всё одно, потянется весь её объем...
...
Рейтинг: 0 / 0
31.01.2018, 18:47
    #39594309
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
Добрый Э - Эха почему ты решил, что 500000 записей из А не охватывают все записи из B ?
где автор сказал, что связь "один-к-одному"?
там, скорее всего, "один-ко-многим" по принципу мастер-детэйлПотому что если охватывают и это действительно мастер-детейл, то в запросе ТС таблица А не нужна.
...
Рейтинг: 0 / 0
01.02.2018, 11:50
    #39594789
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
При такой селективности там по-любому будет просмотр и хэш. Копите деньги на ядра и память.
...
Рейтинг: 0 / 0
01.02.2018, 14:37
    #39594934
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
assmskДобрый день!
Запрос умирает, пробовал через join, apply все тщетно.

Таблица А: (name_ varchar(50), dd_int int) около 500 000 записей.

Таблица В: (name_ varchar(50), dd_int int, amount numeric(20,2) ) Чуть меньше 3 миллиардов
В таблице В индекс:

CREATE CLUSTERED INDEX [ix_indexes_dd_name] ON B
(
[dd_int ] ASC,
[name_ ] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DATA1]
GO



Вот вообщем к таблице А подтянуть поле amount из таблицы В просто беда. Часами висит запрос и ничего.


SELECT A.name_,A.dd_int, B.amount
FROM A A INNER JOIN B B ON A.name_ = B.name_ and A.dd_int = B.dd_int

Какие есть варианты? пс - как то изменить индексы в "В" возможности нет.

Ну вроде очевидно не?

create index ix1 on A (dd_int) include (name_)
...
Рейтинг: 0 / 0
01.02.2018, 16:13
    #39595038
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
assmsk,

Доработать схему так, чтобы никаких текстовых полей в соединенях не участвовало
...
Рейтинг: 0 / 0
03.02.2018, 20:13
    #39596171
nvv
nvv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
Случайное выполнение просто селекта к таблице из 1,5 млрд на серваке с 48 ядрами (HT) и 200Гб озу (фикс для СУБД) сделало его недоступным для подключений на 5 минут ((( "а кто то сделал?" (С)
А вы хотите чтобы 3 млрд, да еще соединение, к тому же хэшматч, не еще не факт что строк останется 3 мдрд (вы про это не писали)
...
Рейтинг: 0 / 0
03.02.2018, 20:20
    #39596172
nvv
nvv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join маленькой таблицы с огромной
Критик, мержить будет когда вычислений над индексируемыми полями не будет. Текстовые поля тут погоду не портят. Да и мерж тоже.
Тут все упирается в отсутствие отборов и объем данных.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Join маленькой таблицы с огромной / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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