Плохая производительность вложенных соединений в Oracle - PullRequest
0 голосов
/ 12 июня 2019

У меня есть общий построитель запросов, который добавляет произвольное количество фильтров. Я получаю низкую производительность на одном из этих фильтров (фильтр b), который требует прохождения двух таблиц.

SELECT * 
FROM   (SELECT "TABLE_1".* 
        FROM   "TABLE_1" 
               -- filter a: 1 table deep (fast)
               inner join (SELECT "SHARED_ID"
                           FROM   "TABLE_4"
                           WHERE "TABLE_4"."COLUMN_A" LIKE '%123%'
                          ) "TABLE_4"
                      ON "TABLE_1"."SHARED_ID" = "TABLE_4"."SHARED_ID"
               -- filter b: 2 tables deep (slow)
               inner join (SELECT "SHARED_ID" 
                           FROM   "TABLE_2" 
                                  inner join (SELECT "ID" 
                                              FROM   "TABLE_3" 
                                              WHERE  NAME LIKE '%Abc%') 
                                             "TABLE_3" 
                                          ON "TABLE_2"."TABLE_3_ID" = 
                          "TABLE_3"."ID") "TABLE_2" 
                       ON "TABLE_1"."SHARED_ID" = "TABLE_2"."SHARED_ID")
WHERE  ROWNUM <= 20 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...