Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
26.10.2016, 16:44
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
FB3. Хочется ускорить запрос. Или для начала понять. Вот такой запрос: Код: sql 1. 2. 3.
Его план: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Нормально я бы сказал. Всё устраивает. Делаю запрос сложнее: Код: sql 1. 2. 3. 4. 5. 6. 7.
Его план: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Получаю сильный перепробег по таблицам, задействованным в хранимке. От перемены порядка джойнов таблиц разницы нет. Как можно уменьшить количество "вызовов" хранимки? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.10.2016, 17:05
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
KreatorXXI, для оптимизатора хранимая процедура - "черный ящик", о чем говорит PLAN (SOTR_RAB NATURAL). "Ускорить" можно разве что разглядывая планы запросов в процедуре (если они там есть). А вообще, если процедура написана как функция, то разумеется, она будет вызываться столько раз, к скольким записям она может быть "присоединена". ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.10.2016, 17:12
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
KreatorXXI Код: sql 1. 2. 3. 4. 5.
Оппа - смесь явных и неявных джойнов в одном запросе. По-моему это даже в FAQ было, что жарптиц от такого зачастую "пухнет и дохнет" ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.10.2016, 17:21
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
KreatorXXI, я бы переделал процедуру так, чтобы она возвращала не одно значение, а набор данных id_sotr, out1. А затем пользовал ее как-то так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.10.2016, 17:32
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
Если бы была конструкция, превращающая функцию в рекордсет, который можно потом сджойнить.... Что-то аналогичное MAP из функциональных языков И потом использовать CTE.... Что-то навроде такого (текст намеренно неправильный, просто показать идею) WITH DATA as select a.id_sotr as sotr, sum(r.trud) as trud from sotr a ... join ... join .... where (условия не касающиеся SP) SELECT d.sotr, d.trud FROM DATA D JOIN (Select out1, x.id_sotr from sotr_rab( x.sotr, ....) from (select distinct sotr from DATA) as x ) as SP ON x.sotr = d.sotr WHERE x.out1 = '1' Собственно говоря, с обычной функцией, у которой результат только один и безымянный так бы и сработало наверное... Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Или с обещанным Lateral Join .... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.10.2016, 17:37
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
где вы понабирали таких хрустальных шаров? или содержимое ХП пациента уже таки опубликовано в газетах? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.10.2016, 18:16
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
искомое достигается началом джойна с таблицы SOTR - либо через left join, либо через + 0 в нужном месте ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 11:28
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
dimitr, А можно пример? Как? У меня с sotr'а начинается. "a.id_sotr=r.id_sotr" в where, конечно полная хрень. Не удалил после эксперимента. Но на результат не влияет. И ещё. Я бы вытащил записи из sotr'а list'ом. И в конструкцию "in" засунул бы. Работает нормально, есть индекс. Но боюсь упереться в ограничение 1500 "членов". Это ограничение в "in" актуально для FB3? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 11:35
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
KreatorXXI, Это как бы ты её засунул? Через Execute Statement что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 11:37
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
KreatorXXI, попробуй вот так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 14:12
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
Симонов Денис, Мне кажется, ты пропустил (или мы по разному поняли ) пожелания: KreatorXXIПолучаю сильный перепробег по таблицам, задействованным в хранимке. Как можно уменьшить количество "вызовов" хранимки? То есть на вход хранимки нужно подать не все ID_SOTR куак у тебя (в этом реально нет сложностей), а DISTINCT ID_SOTR И вот тут уже сложности... Может быть группировкой сымитировать distinct ? Симонов Денис Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Хотч что-то мне кажется не согласиться FB на такой финт ушами... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 14:31
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
Arioch, по идее в моём предложении он должен уменьшится, по крайней мере быть не сильно большим чем в запросе 1, за счёт однократного выполнения CTE ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 14:33
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
Симонов Денис, Нет, перепробовал очень много разных вариантов, и CTE в том числе (и Ваш попробовал, у Вас "as" отутствует). Везде либо также либо хуже. Единственный более-менее вот такой: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И то, наверно из-за того, что фильтр по umass за месяц. За год уже похуже. Но это и не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 14:40
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
KreatorXXI, а вот такой запрос сработает ? select sp.out1, tab.id_sotr from sotr_rab(tab.id_sotr, 91, '2016-10-01', '2016-10-25'), (select distinct ID_SOTR from sotr where ............. ) усли да - то завернуть его ещё в одно derived table и джойнить уже с ним ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 14:41
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
ну либо придется тебе всё-таки не выпендриваться, а делать явную GTT ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 15:19
|
|||
---|---|---|---|
Оптмизация вызова ХП в предложении where |
|||
#18+
KreatorXXIУ меня с sotr'а начинается. в запросе, но не в плане KreatorXXIА можно пример? Код: sql 1. 2. 3. 4. 5. 6. 7.
но вообще тут все сильно зависит от селективности between-а... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 16:07
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
dimitr, Этот запрос, действительно, работает по другому. К сожалению: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Он перестаёт фетчить umass по индексированному полю dat_master, что совсем неправильно, потому что и umass и rz очень большие. Изначально планировщик запросов FB ведёт себя абсолютно правильно - сначала нужно фильтровать umass по dat_master. Всё остальное - плохо. Видимо, надо ждать когда разработчики сделают что-нибудь с конструкцией "in". Где-то я слышал об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.10.2016, 16:11
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
KreatorXXI, в данном случае оптимизация in не поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.10.2016, 10:45
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
Симонов Денис, это смотря какую оптимизацию сделать. Не знаю Ваших планов. В моём случае нужно вытащить одним запросом id-шники, запихнуть их в "in" и будет счастье (может и не кул с точки зрения феншуя, но проблему решает). Другое дело, что я могу упереться в ограничение 1500 элементов. Откуда, кстати, оно? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.10.2016, 10:50
|
|||
---|---|---|---|
|
|||
Оптмизация вызова ХП в предложении where |
|||
#18+
KreatorXXI, с 1500 элементами никаких изменений скорее всего не будет. А вот in/exists в ряде случаев можно заставить работать через SEMI JOIN с различными вариантами NESTED LOOP/MERGE/HASH или преобразовывать (если это более оптимально) в JOIN + DISTINCT ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=40&tablet=1&tid=1561885]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 172ms |
0 / 0 |