powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Join маленькой таблицы с огромной
17 сообщений из 17, страница 1 из 1
Join маленькой таблицы с огромной
    #39594074
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

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

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

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

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

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

а не кртинкой
...
Рейтинг: 0 / 0
Join маленькой таблицы с огромной
    #39594160
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Join маленькой таблицы с огромной
    #39594163
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там ещё и скаляр какой-то, из за него hash я так понимаю, так что не всё там однозначно с описанием
...
Рейтинг: 0 / 0
Join маленькой таблицы с огромной
    #39594290
invm,

а почему ты решил, что 500000 записей из А не охватывают все записи из B ?
где автор сказал, что связь "один-к-одному"?
там, скорее всего, "один-ко-многим" по принципу мастер-детэйл.
никаких дополнительный условий фильтрации данных из таблицы А нет, поэтому условием по мин-макс ты никак не ограничишь объем данных, возвращаемых из таблицы B - всё одно, потянется весь её объем...
...
Рейтинг: 0 / 0
Join маленькой таблицы с огромной
    #39594309
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эха почему ты решил, что 500000 записей из А не охватывают все записи из B ?
где автор сказал, что связь "один-к-одному"?
там, скорее всего, "один-ко-многим" по принципу мастер-детэйлПотому что если охватывают и это действительно мастер-детейл, то в запросе ТС таблица А не нужна.
...
Рейтинг: 0 / 0
Join маленькой таблицы с огромной
    #39594789
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При такой селективности там по-любому будет просмотр и хэш. Копите деньги на ядра и память.
...
Рейтинг: 0 / 0
Join маленькой таблицы с огромной
    #39594934
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Join маленькой таблицы с огромной
    #39595038
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk,

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


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