|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Помогите разобрать с проблемой! запрос: Код: plaintext 1. 2. 3. 4. 5. 6.
Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 15:52 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Версия базы - 10. Тип поля cacc - varchar. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:00 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Кажется здесь уже такое было. Попробуйте substr(cacc,1,4) in ('6010','6011','6012','6013','6014','6015','6016','6017','6018') ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:05 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
На сайте такой проблемы не нашел. Пробовал с кавычками - разницы никакой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:21 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
2face ... отрабатывает за 4 минуты. Но, если заменить substr(cacc,1,4) на cacc[1,4], т.е. ... то выборка идет 3-4 секунды. В чем может быть проблема? А можно взглянуть на планы запросов ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:28 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
vasilis А можно взглянуть на планы запросов ? Извините, а что именно вы хотите увидеть? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:35 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
может есть индекс по полю cacc? может cacc[1,4] его использует, а substr(cacc,1,4) - нет ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:36 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Есть два индекса по полям, одно из которых сасс. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:39 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
2faceЕсть два индекса по полям, одно из которых сасс. чтобы понять, используется ли индекс, надо посмотреть план запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:48 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
С sql я мало работал, а с informix'ом еще меньше. Подскажите как мне посмотреть план запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:52 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
2faceС sql я мало работал, а с informix'ом еще меньше. Подскажите как мне посмотреть план запроса. Код: plaintext 1. 2. 3. 4. 5.
в нем будет план запроса. какая версия Informix у вас? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 16:57 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Как говорят наши айтишники - 9.5 или 10. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 17:00 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
2faceКак говорят наши айтишники - 9.5 или 10. значит у вас поддерживаются директивы оптимизатора, {+ Explain} будет работать ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 17:15 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
QUERY: ------ select {+ Explain} dmfo, dacc, cmfo, cacc, amountuak from vpayord where substr(cacc,1,4) in ('6010','6011','6012','6013','6014','6015','6016','6017','6018') and cmfo=config_getkey('MFO','COMMON') and status in ('+','G') and dtend between MDY(3,1,2008) and MDY(3,31,2008) DIRECTIVES FOLLOWED: EXPLAIN DIRECTIVES NOT FOLLOWED: Estimated Cost: 341 Estimated # of Rows Returned: 14 1) informix.payord: INDEX PATH Filters: ((informix.payord.status IN ('+' , 'G' )AND SUBSTR (informix.payord.cacc , 1 , 4 ) IN ('6010' , '6011' , '6012' , '6013' , '6014' , '6015' , '6016' , '6017' , '6018' )) AND ((EXISTS <subquery> OR EXISTS <subquery> ) OR EXISTS <subquery> ) ) (1) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' ) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) Subquery: --------- Estimated Cost: 1 Estimated # of Rows Returned: 1 1) informix.x1: INDEX PATH (1) Index Keys: iduser acc_mask (Key-Only) (Serial, fragments: ALL) (fragments might be eliminated at runtime because filter contains runtime constants) Lower Index Filter: (informix.x1.acc_mask = 1 AND informix.x1.iduser = USER ) Index Key Filters: ((informix.x1.acc_mask = 1 OR (informix.x1.acc_mask = 2 AND informix.payord.dacclead IS NULL ) ) ) (2) Index Keys: iduser acc_mask (Key-Only) (Serial, fragments: ALL) (fragments might be eliminated at runtime because filter contains runtime constants) Lower Index Filter: (informix.x1.acc_mask = 2 AND informix.x1.iduser = USER ) Index Key Filters: ((informix.x1.acc_mask = 1 OR (informix.x1.acc_mask = 2 AND informix.payord.dacclead IS NULL ) ) ) UDRs in query: -------------- UDR id : 480 UDR name: config_getkey Subquery: --------- Estimated Cost: 6 Estimated # of Rows Returned: 1 1) informix.x5: INDEX PATH (1) Index Keys: idpayord (Serial, fragments: ALL) Lower Index Filter: informix.x5.idpayord = informix.payord.idpayord 2) informix.x4: INDEX PATH (1) Index Keys: iduser acc_mask (Key-Only) (Serial, fragments: ALL) (fragments might be eliminated at runtime because filter contains runtime constants) Lower Index Filter: (informix.x4.acc_mask = informix.x5.access_code AND informix.x4.iduser = USER ) NESTED LOOP JOIN UDRs in query: -------------- UDR id : 480 UDR name: config_getkey Subquery: --------- Estimated Cost: 13 Estimated # of Rows Returned: 1 1) informix.x2: INDEX PATH (1) Index Keys: idacc (Serial, fragments: ALL) Lower Index Filter: informix.x2.idacc = informix.payord.dacclead (2) Index Keys: idacc (Serial, fragments: ALL) Lower Index Filter: informix.x2.idacc = informix.payord.cacclead 2) informix.x3: INDEX PATH (1) Index Keys: iduser acc_mask (Key-Only) (Serial, fragments: ALL) (fragments might be eliminated at runtime because filter contains runtime constants) Lower Index Filter: (informix.x2.access_code = informix.x3.acc_mask AND informix.x3.iduser = USER ) NESTED LOOP JOIN UDRs in query: -------------- UDR id : 480 UDR name: config_getkey UDRs in query: -------------- UDR id : 480 UDR name: config_getkey ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 17:23 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Кто-нибудь может мне объяснить, как по плану запроса определить причину моей проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 17:46 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
2faceКто-нибудь может мне объяснить, как по плану запроса определить причину моей проблемы.а план запроса cacc[1,4] in где? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 17:49 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
select {+ Explain} dmfo, dacc, cmfo, cacc, amountuak from vpayord where cacc[1,4] in (6010,6011,6012,6013,6014,6015,6016,6017,6018) --substr(cacc,1,4) in ('6010','6011','6012','6013','6014','6015','6016','6017','6018') and cmfo=config_getkey('MFO','COMMON') and status in ('+','G') and dtend between MDY(3,1,2008) and MDY(3,31,2008) DIRECTIVES FOLLOWED: EXPLAIN DIRECTIVES NOT FOLLOWED: Estimated Cost: 21 Estimated # of Rows Returned: 1 1) informix.payord: INDEX PATH Filters: (informix.payord.status IN ('+' , 'G' )AND ((EXISTS <subquery> OR EXISTS <subquery> ) OR EXISTS <subquery> ) ) (1) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cacc[1,4] = '6010' AND informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) (2) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cacc[1,4] = '6011' AND informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) (3) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cacc[1,4] = '6012' AND informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) (4) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cacc[1,4] = '6013' AND informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) (5) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cacc[1,4] = '6014' AND informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) (6) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cacc[1,4] = '6015' AND informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) (7) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cacc[1,4] = '6016' AND informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) (8) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cacc[1,4] = '6017' AND informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) (9) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cacc[1,4] = '6018' AND informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/03/2008 ) Subquery: --------- Estimated Cost: 1 Estimated # of Rows Returned: 1 1) informix.x1: INDEX PATH (1) Index Keys: iduser acc_mask (Key-Only) (Serial, fragments: ALL) (fragments might be eliminated at runtime because filter contains runtime constants) Lower Index Filter: (informix.x1.acc_mask = 1 AND informix.x1.iduser = USER ) Index Key Filters: ((informix.x1.acc_mask = 1 OR (informix.x1.acc_mask = 2 AND informix.payord.dacclead IS NULL ) ) ) (2) Index Keys: iduser acc_mask (Key-Only) (Serial, fragments: ALL) (fragments might be eliminated at runtime because filter contains runtime constants) Lower Index Filter: (informix.x1.acc_mask = 2 AND informix.x1.iduser = USER ) Index Key Filters: ((informix.x1.acc_mask = 1 OR (informix.x1.acc_mask = 2 AND informix.payord.dacclead IS NULL ) ) ) UDRs in query: -------------- UDR id : 480 UDR name: config_getkey Subquery: --------- Estimated Cost: 6 Estimated # of Rows Returned: 1 1) informix.x5: INDEX PATH (1) Index Keys: idpayord (Serial, fragments: ALL) Lower Index Filter: informix.x5.idpayord = informix.payord.idpayord 2) informix.x4: INDEX PATH (1) Index Keys: iduser acc_mask (Key-Only) (Serial, fragments: ALL) (fragments might be eliminated at runtime because filter contains runtime constants) Lower Index Filter: (informix.x4.acc_mask = informix.x5.access_code AND informix.x4.iduser = USER ) NESTED LOOP JOIN UDRs in query: -------------- UDR id : 480 UDR name: config_getkey Subquery: --------- Estimated Cost: 13 Estimated # of Rows Returned: 1 1) informix.x2: INDEX PATH (1) Index Keys: idacc (Serial, fragments: ALL) Lower Index Filter: informix.x2.idacc = informix.payord.dacclead (2) Index Keys: idacc (Serial, fragments: ALL) Lower Index Filter: informix.x2.idacc = informix.payord.cacclead 2) informix.x3: INDEX PATH (1) Index Keys: iduser acc_mask (Key-Only) (Serial, fragments: ALL) (fragments might be eliminated at runtime because filter contains runtime constants) Lower Index Filter: (informix.x2.access_code = informix.x3.acc_mask AND informix.x3.iduser = USER ) NESTED LOOP JOIN UDRs in query: -------------- UDR id : 480 UDR name: config_getkey UDRs in query: -------------- UDR id : 480 UDR name: config_getkey ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 17:57 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Судя по этим файлам substr не использует индекс. А почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 18:01 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
2faceСудя по этим файлам substr не использует индекс. А почему?потому что это функция, все субд так делают. Нужен функуциональный индекс substr(cacc,1,4) вообще я думаю что надо начинать с индекса по dtend (between MDY(3,1,2008) and MDY(3,31,2008)) если нет индексов фрагментированных по dtend. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2008, 18:09 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Конкретно для данного случая правильнее было бы написать cacc LIKE '601%' 6019 счета все равно нет, ну а если появится, то наверняка потребуется. Я в таких случаях предпочитаю выносить все в настроечную табличку. Кстати, если это процедура, то имеет смысл использовать просто payord, вьюха все таки тяжелее и для разных пользователей будет выдавать разные результаты, в зависимости от их доступов. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 10:17 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Таблицу payord я не могу использовать, т.к. наши айтишники не рекомендуют мне этого делать. Мне просто очень интересно, почему substr так убого работает. До этого работал с ораклом и там все было нормально, даже при работе с таблицами с большим количеством записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 10:41 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
ну работает оно так - ниче не поделаешь. Типичный вопрос ораклистов - почему не так как в оракле? Ну реализовали в информикс вот таким макаром. Дао прав по поводу лайк - тогда тоже берется индекс и все фильтры идут по индексу. Estimated Cost: 437 Estimated # of Rows Returned: 649 1) informix.payord: INDEX PATH (1) Index Keys: cmfo cacc currency dtend (Key-First) (Serial, fragments: ALL) Lower Index Filter: (informix.payord.cmfo = informix.config_getkey('MFO' ,'COMMON' )AND informix.payord.cacc LIKE '601 %' ) Index Key Filters: (informix.payord.dtend >= 01/03/2008 ) AND (informix.payord.dtend <= 31/10/2008 ) От того - представление это или нет - план для указанного фильтра не изменяется(я сделал для таблицы). А собственно почему - Денис уже ответил. Хотя, в данном случае было бы логично чтобы фильтр substr, если нчинается с первого символа, ганладывался на индекс. Ну а если вы считаете что это неправильно - делайте запрос в IBM и настаивайте. Как оформить запрос - думаю ваш разработчик вам поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 11:05 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
2faceДо этого работал с ораклом и там все было нормально, даже при работе с таблицами с большим количеством записей.В этом месте информикс лучше оракла в несколько раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 11:10 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Журавлев Денис2faceДо этого работал с ораклом и там все было нормально, даже при работе с таблицами с большим количеством записей.В этом месте информикс лучше оракла в несколько раз.Речь про форум или про большие таблицы? Если первое - то не в несколько раз, а в принципе. Если про второе - спорно :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 11:22 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Евгений ФадеевЖуравлев Денис2faceДо этого работал с ораклом и там все было нормально, даже при работе с таблицами с большим количеством записей.В этом месте информикс лучше оракла в несколько раз.Речь про форум или про большие таблицы? Если первое - то не в несколько раз, а в принципе. Если про второе - спорно :))про where substr(field)= http://dil.livejournal.com/712512.html#t4415296 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 11:28 |
|
|
start [/forum/topic.php?fid=44&msg=35590739&tid=1607978]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 322ms |
total: | 500ms |
0 / 0 |