|
|
|
Есть ли разница, как делать соединение merge?
|
|||
|---|---|---|---|
|
#18+
Есть таблица tbl (tbl_id, client_id, attr_id, value, ...). tbl_id это PK, по (client_id,attr_id) есть уникальный индекс. Мне нужно обновить данные в этой таблице. Есть ли разница, как это сделать? Код: plsql 1. 2. 3. 4. 5. 6. 7. и Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Реальный пример более громоздкий и мне второй вариант более удобен просто потому, что для меня он более читаем. Как можно оценить, насколько лишнее соединение по PK усложняет запрос для сервера? Мне не совсем понятно, как в данном случае получить план выполнения, ведь в merge у меня используются и when matched, и when not matched. Если сравнивать просто план выполнения запроса внутри using, он ведь не покажет наружнего соединения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2019, 23:10 |
|
||
|
Есть ли разница, как делать соединение merge?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Мне не совсем понятно, как в данном случае получить план выполненияТ.е. ты не знаешь, как получать план, или считаешь, что для особо одарённых припрятана особая команда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2019, 07:55 |
|
||
|
Есть ли разница, как делать соединение merge?
|
|||
|---|---|---|---|
|
#18+
Alibek B., для меня более читаемий первый вариант ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2019, 11:14 |
|
||
|
Есть ли разница, как делать соединение merge?
|
|||
|---|---|---|---|
|
#18+
ElicТ.е. ты не знаешь, как получать план Я не уверен, как это делать правильно. Я выполнил explain plain для обоих вариантов, но в полученном плане не заметил внешнего соединения по PK (для using во втором варианте). Staxдля меня более читаемий первый вариант В какой-то степени это дело вкуса. Но в условиях соединения иногда встречаются достаточно сложные выражения. Кроме того, во втором варианте легко выполнить внутренний запрос, чтобы визуально проверить его правильность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2019, 11:25 |
|
||
|
Есть ли разница, как делать соединение merge?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Я выполнил explain plain для обоих вариантов, но в полученном плане не заметил внешнего соединения по PK (для using во втором варианте). мож оракля что-то cоптимизировал (хотя я сомневаюсь) имхо должно появится два соединения аля Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2019, 11:42 |
|
||
|
Есть ли разница, как делать соединение merge?
|
|||
|---|---|---|---|
|
#18+
Во втором случае мы будем лишний раз читать tbl, не? PS: зависит от объемов. На частой операции и больших объемах (репликация-самописка) в итоге отказались от merge в пользу forall insert save exceptions /update . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2019, 11:51 |
|
||
|
Есть ли разница, как делать соединение merge?
|
|||
|---|---|---|---|
|
#18+
MazoHistВо втором случае мы будем лишний раз читать tbl, не? Да, вопрос как раз в том, насколько это трудоемко для сервера. Поскольку используется PK, то возможно что оверхед совсем небольшой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2019, 12:04 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=88&tid=1882927]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 396ms |

| 0 / 0 |
