Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оптимизация / 18 сообщений из 18, страница 1 из 1
16.08.2017, 08:00
    #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
16.08.2017, 09:25
    #39506069
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация
trace.log,

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

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

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

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

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

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

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

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

....
stax
...
Рейтинг: 0 / 0
16.08.2017, 12:23
    #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
16.08.2017, 12:28
    #39506239
trace.log
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация
Stax,

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

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

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

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

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

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

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

.....
stax

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

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

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

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

.....
stax
...
Рейтинг: 0 / 0
16.08.2017, 14:24
    #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
16.08.2017, 19:49
    #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
16.08.2017, 20:19
    #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
17.08.2017, 08:53
    #39506651
trace.log
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация
спасибо всем.
после того как убрал условие, SQL Tuning Results выдал следующее: нет рекомендаций.
...
Рейтинг: 0 / 0
17.08.2017, 08:57
    #39506653
env
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
22.08.2017, 18:53
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Оптимизация / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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