|
|
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
Добрый день! Запрос умирает, пробовал через 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 Какие есть варианты? пс - как то изменить индексы в "В" возможности нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 15:19:34 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
Вопрос решился, сервак лежал просто...)) За 15 минут выгрузил, но может есть все же варианты ускорить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 15:22:16 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
План запроса покажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 15:23:53 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
assmsk, а в A такой же индекс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 15:25:52 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
TaPaKassmsk, а в A такой же индекс? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 15:26:27 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
assmsk, ну тут план кончено... а так должно было merge поставить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 15:27:41 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 15:32:55 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
assmsk, а не кртинкой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 15:33:55 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
assmskTaPaKassmsk, а в A такой же индекс? ДаСудя по плану, таки нет. Если на таблицах кластерные индексы с одинаковым первым столбцом dd_int, то, по крайней мере в теории, ускорить можно так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 16:38:23 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
там ещё и скаляр какой-то, из за него hash я так понимаю, так что не всё там однозначно с описанием ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 16:44:17 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
invm, а почему ты решил, что 500000 записей из А не охватывают все записи из B ? где автор сказал, что связь "один-к-одному"? там, скорее всего, "один-ко-многим" по принципу мастер-детэйл. никаких дополнительный условий фильтрации данных из таблицы А нет, поэтому условием по мин-макс ты никак не ограничишь объем данных, возвращаемых из таблицы B - всё одно, потянется весь её объем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 18:34:09 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эха почему ты решил, что 500000 записей из А не охватывают все записи из B ? где автор сказал, что связь "один-к-одному"? там, скорее всего, "один-ко-многим" по принципу мастер-детэйлПотому что если охватывают и это действительно мастер-детейл, то в запросе ТС таблица А не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 18:47:54 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
При такой селективности там по-любому будет просмотр и хэш. Копите деньги на ядра и память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 11:50:42 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
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_) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 14:37:52 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
assmsk, Доработать схему так, чтобы никаких текстовых полей в соединенях не участвовало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 16:13:53 |
|
||
|
Join маленькой таблицы с огромной
|
|||
|---|---|---|---|
|
#18+
Случайное выполнение просто селекта к таблице из 1,5 млрд на серваке с 48 ядрами (HT) и 200Гб озу (фикс для СУБД) сделало его недоступным для подключений на 5 минут ((( "а кто то сделал?" (С) А вы хотите чтобы 3 млрд, да еще соединение, к тому же хэшматч, не еще не факт что строк останется 3 мдрд (вы про это не писали) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2018, 20:13:30 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39594085&tid=1690356]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 198ms |
| total: | 497ms |

| 0 / 0 |
