powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оптимизация
18 сообщений из 18, страница 1 из 1
Оптимизация
    #39506026
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Такой вопрос -SQL Tuning Results выдал следующее замечание:
Код: sql
1.
Predicate "D"."ST_ST_ID"<>7 used at line ID 5 of the execution plan is an inequality condition on indexed column "ST_ST_ID". This inequality condition prevents the optimizer from selecting indices on table "TEST"."DOCUMENTS".


Сам запрос выборки выглядит с условием:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
INSERT INTO TEST_PRK.REG_NUMB VALUE ( SELECT DISTINCT D.REG_NUMB, :B4 , D.DT_IMPORT , D.CASE_NUMB FROM TEST.DOC_TEXTS DT, TEST.DOCUMENTS D WHERE D.DOC_ID = DT.DOC_DOC_ID AND D.DT_IMPORT >= TO_DATE (:B3 , 'dd.mm.yyyy') AND D.DT_IMPORT < TO_DATE (:B2 , 'dd.mm.yyyy') AND D.ST_ST_ID != 7 AND DT.IS_IMPERSONAL = 0 AND REGEXP_LIKE (REGEXP_REPLACE (DT.TEXT, '[^[[:alnum:]]]*'), :B1 , 'in')


как правильно переписать условие для AND D.ST_ST_ID != 7 , чтобы работал индекс?
Версия Оракла - Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64
...
Рейтинг: 0 / 0
Оптимизация
    #39506069
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.log,

А Вы уверены, что Вам нужно заставить работать индекс именно по "всё множество, кроме"?
Особенно при наличии фильтра по дате.

Покажите план запроса и ddl таблиц и индексов - будет проще.
...
Рейтинг: 0 / 0
Оптимизация
    #39506172
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

хотелось бы усекать аннулированные документы, состояние = 7 (аннулировано), вернее сказать, чтобы они в выборку не попадали. Если перечислить все состояния, которые должны попасть в выборку, это желаемого результата тоже не принесет же?
...
Рейтинг: 0 / 0
Оптимизация
    #39506194
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.log,

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

В противном случае Вы, грубо говоря, сообщаете оптимизатору, что Вам надо 95% данных из 100%. И оптимизатор вполне резонно считает, что использование индекса в такой ситуации бесполезно.

Покажите план запроса и ddl имеющихся индексов.
...
Рейтинг: 0 / 0
Оптимизация
    #39506233
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

вопрос скорее в том, почему SQL Tuning Results выдал следующее замечание?

ps
для <>7 можно сделать FBI индекс, токо вот зачем

....
stax
...
Рейтинг: 0 / 0
Оптимизация
    #39506234
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Plan hash value: 640862451
 
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name            | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT                |                 |   165K|    21M|       |   263K  (1)| 00:52:40 |
|   1 |  HASH UNIQUE                    |                 |   165K|    21M|    23M|   263K  (1)| 00:52:40 |
|*  2 |   FILTER                        |                 |       |       |       |            |          |
|*  3 |    TABLE ACCESS BY INDEX ROWID  | DOC_TEXTS       |     1 |    96 |       |     1   (0)| 00:00:01 |
|   4 |     NESTED LOOPS                |                 |   165K|    21M|       |   258K  (1)| 00:51:40 |
|*  5 |      TABLE ACCESS BY INDEX ROWID| DOCUMENTS       |   164K|  6266K|       |   108K  (1)| 00:21:43 |
|*  6 |       INDEX RANGE SCAN          | DOC_DT_IMPORT_I |   317K|       |       |  2018   (1)| 00:00:25 |
|*  7 |      INDEX RANGE SCAN           | DTX_DOC_FK_I    |     1 |       |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - filter(TO_DATE(:B3,'dd.mm.yyyy')<TO_DATE(:B2,'dd.mm.yyyy'))
   3 - filter("DT"."IS_IMPERSONAL"=0 AND  REGEXP_LIKE ( REGEXP_REPLACE 
              ("DT"."TEXT",'[^[[:alnum:]]]*'),:B1,'in'))
   5 - filter("D"."ST_ST_ID"<>7)
   6 - access("D"."DT_IMPORT">=TO_DATE(:B3,'dd.mm.yyyy') AND 
              "D"."DT_IMPORT"<TO_DATE(:B2,'dd.mm.yyyy'))
   7 - access("D"."DOC_ID"="DT"."DOC_DOC_ID")


DDL индексов таблицы документов:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
CREATE INDEX DOC_CASE_NUMB_FBI ON DOCUMENTS
(UPPER("CASE_NUMB"))
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_COMPLEX_ST_I ON DOCUMENTS
(ST_ST_ID, FULL_ST_ST_ID, IMP_ST_ST_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_CRT_CRT_TAG_ID_I ON DOCUMENTS
(CRT_CRT_TAG_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_CRT_FK_I ON DOCUMENTS
(CRT_CRT_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_CSC_FK_I ON DOCUMENTS
(CSC_CSC_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DOC_UID_I ON DOCUMENTS
(DOC_UID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DT_CASE ON DOCUMENTS
(DT_CASE)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DT_CREATED_I ON DOCUMENTS
(DT_CREATED)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DT_IMPORT_I ON DOCUMENTS
(DT_IMPORT)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DT_LAW_I ON DOCUMENTS
(DT_LAW)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DT_NOTICE_I ON DOCUMENTS
(DT_NOTICE)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DT_NOTICE_IMPERSONAL_I ON DOCUMENTS
(DT_NOTICE_IMPERSONAL)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DT_OPERATION_DEP_I ON DOCUMENTS
(DT_OPERATION_DEP)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DT_OPERATION_DEST_I ON DOCUMENTS
(DT_OPERATION_DEST)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_DT_REGISTRATION_I ON DOCUMENTS
(DT_REGISTRATION)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_FILE_NAME_FBI ON DOCUMENTS
(UPPER("FILE_NAME"))
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_FULL_ST_FK_I ON DOCUMENTS
(FULL_ST_ST_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_HEARINGCLOSED_FK_I ON DOCUMENTS
(HEARINGCLOSED)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_IMP_ST_FK_I ON DOCUMENTS
(IMP_ST_ST_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE UNIQUE INDEX DOC_PK ON DOCUMENTS
(DOC_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_PKG_FK_I ON DOCUMENTS
(PKG_PKG_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_REG_NUMB_I ON DOCUMENTS
(REG_NUMB)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_ST_FK_I ON DOCUMENTS
(ST_ST_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_TAG_NUMB_I ON DOCUMENTS
(TAG_NUMB)
LOGGING
TABLESPACE RSR_TAB
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_USR_FK_I ON DOCUMENTS
(USR_USR_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_USR_USR_DEP_ID_I ON DOCUMENTS
(USR_USR_DEP_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX DOC_USR_USR_DEST_ID_I ON DOCUMENTS
(USR_USR_DEST_ID)
LOGGING
TABLESPACE RSR_INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX IDX_DT_SIGN_S_FR_COURT ON DOCUMENTS
(DT_DOC_SIGN_SEND_FROM_COURT)
LOGGING
TABLESPACE RSR_TAB
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX IDX_DT_TEXT_S_FR_COURT ON DOCUMENTS
(DT_DOC_TEXT_SEND_FROM_COURT)
LOGGING
TABLESPACE RSR_TAB
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;



...
Рейтинг: 0 / 0
Оптимизация
    #39506239
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

могу убрать условие и посмотреть как пойдет процесс, если выигрыш будет значительным, значит оставлю так, но в выборку допилю статус документа, благо их немного должно быть, но думал, что отптимизатор можно как-то обмануть без всяких пересозданий индексов.
...
Рейтинг: 0 / 0
Оптимизация
    #39506264
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.log,

У Вас так много индексов, что добавить еще один (decode(ST_ST_ID,7,null,0)) не должно стать проблемой

если "удаленных" документов относительно немного, то я не вижу смысла в індексе

.....
stax
...
Рейтинг: 0 / 0
Оптимизация
    #39506278
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

идея понятна, посмотрю, что удасться выиграть, если это условие вообще убрать.
...
Рейтинг: 0 / 0
Оптимизация
    #39506281
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.logStax,

идея понятна, посмотрю, что удасться выиграть, если это условие вообще убрать.

думаю оптимизатору мозгов хватит остаться на индексе по дате ))
...
Рейтинг: 0 / 0
Оптимизация
    #39506315
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
если "удаленных" документов относительно немного, то я не вижу смысла в індексе

.....
stax

Скорее всего там вторичный ключ проиндексирован
...
Рейтинг: 0 / 0
Оптимизация
    #39506329
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВАtrace.logStax,

идея понятна, посмотрю, что удасться выиграть, если это условие вообще убрать.

думаю оптимизатору мозгов хватит остаться на индексе по дате ))

мож index_combine занюхает

.....
stax
...
Рейтинг: 0 / 0
Оптимизация
    #39506345
Фотография rf_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT /*+ INDEX(v.e2.e3 emp_job_ix) */ *
FROM v;

https://docs.oracle.com/cd/B19306_01/server.102/b14211/hintsref.htm#i27644
...
Рейтинг: 0 / 0
Оптимизация
    #39506562
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trace.log
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
INSERT
INTO    TEST_PRK.REG_NUMB VALUE
        (
                SELECT DISTINCT D.REG_NUMB,
                        :B4               ,
                        D.DT_IMPORT       ,
                        D.CASE_NUMB
                FROM    TEST.DOC_TEXTS DT,
                        TEST.DOCUMENTS D
                WHERE   D.DOC_ID             = DT.DOC_DOC_ID
                        AND D.DT_IMPORT     >= TO_DATE (:B3 , 'dd.mm.yyyy')
                        AND D.DT_IMPORT      < TO_DATE (:B2 , 'dd.mm.yyyy')
                        AND D.ST_ST_ID      != 7
                        AND DT.IS_IMPERSONAL = 0
                        AND REGEXP_LIKE (REGEXP_REPLACE (DT.TEXT, '[^[[:alnum:]]]*'), :B1 , 'in')


как правильно переписать условие для AND D.ST_ST_ID != 7, чтобы работал индекс?
Чтобы работал(-и) индекс(-ы) (по отдельности) , вот так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with dt as
 (SELECT DOC_DOC_ID,
         :B4 as b4,
         TO_DATE(:B3, 'dd.mm.yyyy') as b3,
         TO_DATE(:B2, 'dd.mm.yyyy') as b2
    FROM TEST.DOC_TEXTS
   WHERE DT.IS_IMPERSONAL = 0
     AND REGEXP_LIKE(REGEXP_REPLACE(DT.TEXT, '[^[[:alnum:]]]*'), :B1, 'in'))
SELECT DISTINCT D.REG_NUMB, dt.b4, D.DT_IMPORT, D.CASE_NUMB
  FROM DT, TEST.DOCUMENTS D
 WHERE D.DOC_ID = DT.DOC_DOC_ID
   AND D.DT_IMPORT >= dt.B3
   AND D.DT_IMPORT < dt.B2
minus
SELECT D.REG_NUMB, dt.b4, D.DT_IMPORT, D.CASE_NUMB
  FROM DT, TEST.DOCUMENTS D
 WHERE D.DOC_ID = DT.DOC_DOC_ID AND D.ST_ST_ID = 7
...
Рейтинг: 0 / 0
Оптимизация
    #39506576
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так правильно:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with dt as
 (SELECT DOC_DOC_ID,
         :B4 as b4,
         TO_DATE(:B3, 'dd.mm.yyyy') as b3,
         TO_DATE(:B2, 'dd.mm.yyyy') as b2
    FROM TEST.DOC_TEXTS
   WHERE DT.IS_IMPERSONAL = 0
     AND REGEXP_LIKE(REGEXP_REPLACE(DT.TEXT, '[^[[:alnum:]]]*'), :B1, 'in')),
D as (SELECT DISTINCT D.REG_NUMB, dt.b4, D.DT_IMPORT, D.CASE_NUMB, 
D.ST_ST_ID
  FROM DT, TEST.DOCUMENTS D
 WHERE D.DOC_ID = DT.DOC_DOC_ID
   AND D.DT_IMPORT >= dt.B3
   AND D.DT_IMPORT < dt.B2
minus
SELECT D.REG_NUMB, dt.b4, D.DT_IMPORT, D.CASE_NUMB,
D.ST_ST_ID
  FROM DT, TEST.DOCUMENTS D
 WHERE D.DOC_ID = DT.DOC_DOC_ID AND D.ST_ST_ID = 7)
select D.REG_NUMB, d.b4, D.DT_IMPORT, D.CASE_NUMB from d
group by D.REG_NUMB, d.b4, D.DT_IMPORT, D.CASE_NUMB
...
Рейтинг: 0 / 0
Оптимизация
    #39506651
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо всем.
после того как убрал условие, SQL Tuning Results выдал следующее: нет рекомендаций.
...
Рейтинг: 0 / 0
Оптимизация
    #39506653
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogel,

Нет опасения, что
Код: plsql
1.
2.
3.
4.
5.
6.
7.
AS (SELECT DOC_DOC_ID,
         :B4 as b4,
         TO_DATE(:B3, 'dd.mm.yyyy') as b3,
         TO_DATE(:B2, 'dd.mm.yyyy') as b2
    FROM TEST.DOC_TEXTS
   WHERE DT.IS_IMPERSONAL = 0
     AND REGEXP_LIKE(REGEXP_REPLACE(DT.TEXT, '[^[[:alnum:]]]*'), :B1, 'in')


вызовет фулскан doc_texts и материализацию в temp?
...
Рейтинг: 0 / 0
Оптимизация
    #39508953
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envFogel,

Нет опасения, что
Код: plsql
1.
2.
3.
4.
5.
6.
7.
AS (SELECT DOC_DOC_ID,
         :B4 as b4,
         TO_DATE(:B3, 'dd.mm.yyyy') as b3,
         TO_DATE(:B2, 'dd.mm.yyyy') as b2
    FROM TEST.DOC_TEXTS
   WHERE DT.IS_IMPERSONAL = 0
     AND REGEXP_LIKE(REGEXP_REPLACE(DT.TEXT, '[^[[:alnum:]]]*'), :B1, 'in')


вызовет фулскан doc_texts и материализацию в temp?

Нет. План запроса, который привели, показал, что oracle строит его, считая, что в этой таблице согласно условию отбора существенно меньше данных (при том, что из второй таблицы берётся почти всё):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name            | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT                |                 |   165K|    21M|       |   263K  (1)| 00:52:40 |
|   1 |  HASH UNIQUE                    |                 |   165K|    21M|    23M|   263K  (1)| 00:52:40 |
|*  2 |   FILTER                        |                 |       |       |       |            |          |
|*  3 |    TABLE ACCESS BY INDEX ROWID  | DOC_TEXTS       |     1 |    96 |       |     1   (0)| 00:00:01 |
|   4 |     NESTED LOOPS                |                 |   165K|    21M|       |   258K  (1)| 00:51:40 |
|*  5 |      TABLE ACCESS BY INDEX ROWID| DOCUMENTS       |   164K|  6266K|       |   108K  (1)| 00:21:43 |
|*  6 |       INDEX RANGE SCAN          | DOC_DT_IMPORT_I |   317K|       |       |  2018   (1)| 00:00:25 |
|*  7 |      INDEX RANGE SCAN           | DTX_DOC_FK_I    |     1 |       |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------



ну а дальше уже реальная кардинальность расставит всё по своим местам.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оптимизация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]