2015-03-24 4 views
0

Моя логика в этом вопросе правильная (ну, на самом деле, 80% это действительно так). но его уже в течение 2ч 23мин и все еще продолжается, было интересно, если кто-нибудь может помочь мне, может сделать это более эффективно, как и я не думаю, что немного пробежаться его, что интенсивные запросаНеэффективный запрос на поиск SQL - Oracle DB

SELECT b.bridge_no, COUNT(*) AS comment_cnt 
    FROM iacd_asset b INNER JOIN iacd_note c 
    ON REGEXP_LIKE(c.comments, '(^|\W)BN' || b.bridge_no || '(\W|$)', 'i') 
inner join ncr_note e on c.note_id=e.note_id 
inner join ncr f on e.ncr_id=f.ncr_id 
inner join ncr_iac g on f.ncr_id=g.ncr_id 
WHERE c.create_dt >= date'2015-01-01' 
    AND c.create_dt < date'2015-03-12' 
    AND length(b.bridge_no) > 1 
    AND g.scheme in (1, 3, 5, 6, 7, 8, 9, 9, and about 10 more values) 
GROUP BY b.bridge_no 
ORDER BY comment_cnt; 

в короткий запрос должен составлять кучу объединений, а затем фильтровать объединенную таблицу по схемам (g.scheme in ....), а затем анализировать поле примечаний для чего-либо с BN в нем.

ПЛАН СТОЛ, хорошо я никогда не использовал один и раньше, но я считаю, что это таблица плана

+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| OPERATION  | OPTIONS  | OBJECT_OWNER | OBJECT_NAME  | OBJECT_ALIAS | OBJECT_INSTANCE | OBJECT_TYPE | OPTIMIZER | ID | PARENT_ID | DEPTH | POSITION | COST | CARDINALITY | BYTES  | CPU_COST  | IO_COST | TEMP_SPACE | ACCESS_PREDICATES   | FILTER_PREDICATES                | PROJECTION                    | TIME | QBLOCK_NAME | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| SELECT STATEMENT |    |    |     |    |     |    | ALL_ROWS | 0 |   | 0  | 281,503 | 281,503 | 40   | 4,480  | 148,378,917,975 | 215,677 |   |        |                     |                       | 458 |    | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| SORT    | ORDER BY  |    |     |    |     |    |   | 1 | 0   | 1  | 1  | 281,503 | 40   | 4,480  | 148,378,917,975 | 215,677 |   |        |                     | (#keys=1) COUNT(*)[22], "B"."BRIDGE_NO"[NUMBER,22]          | 458 | SEL$81719215 | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| HASH    | GROUP BY  |    |     |    |     |    |   | 2 | 1   | 2  | 1  | 281,503 | 40   | 4,480  | 148,378,917,975 | 215,677 |   |        |                     | (#keys=1) "B"."BRIDGE_NO"[NUMBER,22], COUNT(*)[22]          | 458 |    | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| HASH JOIN  |    |    |     |    |     |    |   | 3 | 2   | 3  | 1  | 281,497 | 16,084  | 1,801,408 | 148,366,537,976 | 215,677 | 24,126,000 | "G"."NCR_ID"="F"."NCR_ID" |                     | (#keys=1) "B"."BRIDGE_NO"[NUMBER,22]             | 458 |    | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| HASH JOIN  |    |    |     |    |     |    |   | 4 | 3   | 4  | 1  | 96,996 | 209,778  | 21,607,134 | 13,549,630,814 | 90,985 | 22,725,000 | "E"."NCR_ID"="F"."NCR_ID" |                     | (#keys=1) "F"."NCR_ID"[NUMBER,22], "B"."BRIDGE_NO"[NUMBER,22]       | 158 |    | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| HASH JOIN  |    |    |     |    |     |    |   | 5 | 4   | 5  | 1  | 42,595 | 208,419  | 20,216,643 | 5,484,063,163 | 40,162 | 9,839,000 | "C"."NOTE_ID"="E"."NOTE_ID" | REGEXP_LIKE ("C"."COMMENTS",'(^|\W)BN'||TO_CHAR("B"."BRIDGE_NO")||'(\W|$)','i') | (#keys=1) "B"."BRIDGE_NO"[NUMBER,22], "E"."NCR_ID"[NUMBER,22]       | 70 |    | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| PARTITION RANGE | SINGLE   |    |     |    |     |    |   | 6 | 5   | 6  | 1  | 1,039 | 104,603  | 8,577,446 | 62,280,224  | 1,011 |   |        |                     | "C"."NOTE_ID"[NUMBER,22], "C"."COMMENTS"[VARCHAR2,4000]         | 2 |    | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| TABLE ACCESS  | FULL   | IACDB  | IACD_NOTE  | [email protected]$1  | 2    | TABLE   | ANALYZED | 7 | 6   | 7  | 1  | 1,039 | 104,603  | 8,577,446 | 62,280,224  | 1,011 |   |        | "C"."CREATE_DATE"<TO_DATE(' 2014-12-31 00:00:00', 'syyyy-mm-dd hh24:mi:ss')  | "C"."NOTE_ID"[NUMBER,22], "C"."COMMENTS"[VARCHAR2,4000]         | 2 | SEL$81719215 | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| MERGE JOIN  | CARTESIAN  |    |     |    |     |    |   | 8 | 5   | 6  | 2  | 24,267 | 12,268,270 | 184,024,050 | 2,780,501,758 | 23,033 |   |        |                     | (#keys=0) "B"."BRIDGE_NO"[NUMBER,22], "E"."NCR_ID"[NUMBER,22], "E"."NOTE_ID"[NUMBER,22] | 40 |    | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| TABLE ACCESS  | FULL   | IACDB  | IACD_ASSET  | [email protected]$1  | 1    | TABLE   | ANALYZED | 9 | 8   | 7  | 1  | 7  | 40   | 160   | 560,542   | 7  |   |        | LENGTH(TO_CHAR("B"."BRIDGE_NO"))>1            | "B"."BRIDGE_NO"[NUMBER,22]                | 1 | SEL$81719215 | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| BUFFER   | SORT   |    |     |    |     |    |   | 10 | 8   | 7  | 2  | 24,259 | 308,248  | 3,390,728 | 2,779,941,216 | 23,026 |   |        |                     | (#keys=0) "E"."NCR_ID"[NUMBER,22], "E"."NOTE_ID"[NUMBER,22]        | 40 |    | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| TABLE ACCESS  | FULL   | IACDB  | IACD_NCR_NOTE | [email protected]$2  | 4    | TABLE   | ANALYZED | 11 | 10  | 8  | 1  | 606  | 308,248  | 3,390,728 | 69,498,530  | 576  |   |        |                     | "E"."NCR_ID"[NUMBER,22], "E"."NOTE_ID"[NUMBER,22]          | 1 | SEL$81719215 | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| INDEX   | FAST FULL SCAN | IACDB  | PK_IACDNCR_NCRID | [email protected]$3  |     | INDEX (UNIQUE) | ANALYZED | 12 | 4   | 5  | 2  | 31,763 | 22,838,996 | 137,033,976 | 3,248,120,913 | 30,322 |   |        |                     | "F"."NCR_ID"[NUMBER,22]                 | 52 | SEL$81719215 | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 
| TABLE ACCESS  | FULL   | IACDB  | IACD_NCR_IAC  | [email protected]$4  | 8    | TABLE   | ANALYZED | 13 | 3   | 4  | 2  | 181,461 | 1,731,062 | 15,579,558 | 134,407,812,606 | 121,833 |   |        | ALL THE SCHEMES CHCECKS               | "G"."NCR_ID"[NUMBER,22]                 | 295 | SEL$81719215 | 
+------------------+----------------+--------------+------------------+--------------+-----------------+----------------+-----------+----+-----------+-------+----------+---------+-------------+-------------+-----------------+---------+------------+-----------------------------+---------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------+------+--------------+ 

Надеется, то будет достаточно разборчивым

interms индексов я предполагаю только те поля, которые сортируются является ВАЖНАЯ crate_dt не индексируется схема ID индексируется

Может быть, мой заказ в запросе не так ...

+0

Опубликовать план объяснения. Каковы показатели? –

+0

Что такое план запроса? Какие индексы доступны? Какие предикаты являются избирательными? Насколько они избирательны? –

+0

обновленный основной пост с дополнительной информацией, с точки зрения предиката, единственный избирательный - это действительно схемы, на которых есть около 50 значений на выбор. другой - диапазон дат и разбор BN, в области комментариев, которые, как я думаю, теоретически может быть много? – cain2060

ответ

2

В плане показано, что вы выполняете FULL TABLE SCAN IACD_NOTE и IACD_ASSET, а затем делаете CARETESIAN-соединение с ними, потому что вы предоставили никаких критериев для связывания одной записи в IACD_ASSET с набором записей в IACD_NOTE.

Это не мое определение неинтенсивного запроса, и эти значения для стоимости ЦП несут это.

Вы должны заменить это ..,

FROM iacd_asset b INNER JOIN iacd_note c 
ON REGEXP_LIKE(c.comments, '(^|\W)BN' || b.bridge_no || '(\W|$)', 'i') 

... с фактическим присоединиться индексированных столбцов. Было бы полезно, если Notes были связаны с активами внешним ключом BRIDGE_NO или аналогичным. Я не знаю вашу модель данных. Затем вы можете использовать это регулярное выражение в качестве дополнительного фильтра в предложении WHERE.

Также вы присоединяетесь к трем дополнительным таблицам, чтобы добраться до чего-то, что позволяет использовать дополнительный фильтр на SCHEME. Опять же, я не знаю вашу модель данных, но это кажется довольно неэффективным.

К сожалению, это та настройка, которая зависит от знания домена. Для исправления этого запроса требуется понимание данных - его объем, распределение и перекос, сама модель данных и бизнес-логика, которые выполняет ваш запрос. Это выходит за рамки рекомендаций, которые мы можем предложить в StackOverflow.


Следует учитывать одно обстоятельство, но это большое решение - проиндексировать комментарии с помощью бесплатного текстового индекса. Тем не менее, у этого есть много разветвлений (особенно пространство и администратор базы данных). Find out more.

+0

Итак, если я выберу функцию REGEXP_LIKE, чтобы сбрасывать только все значения объединений, запрос занимает около 4 минут ..... Если я удалю объединения и просто выполняю функцию REGEXP_LIKE на двух таблицах, это требует 7 мин .... Итак, у меня бы получилось, если бы я мог структурировать свой запрос, чтобы сначала выполнить объединения, а затем проанализировать результаты ... это не так долго? правильно? – cain2060

Смежные вопросы