|
Проблема с 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 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
В принципе, я получил ответ на свой вопрос. Всем спасибо за помощь и пояснения. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 11:41 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Евгений ФадеевЖуравлев Денис2faceДо этого работал с ораклом и там все было нормально, даже при работе с таблицами с большим количеством записей.В этом месте информикс лучше оракла в несколько раз.Речь про форум или про большие таблицы? Если первое - то не в несколько раз, а в принципе. Если про второе - спорно :)) Если Вас не устраивает функциональность substr или поиск по LIKE - тогда можно использовать технологию DataBlade - IBM INFORMIX EXCALIBUR TEXT SEARCH DATABLADE MODULE или бесплатный поисковый datablade для версии 11.x С уважением, Вадим ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 12:28 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Внимательно посмотрел (дошли руки) 1 запрос substr (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 ) 2 запрос (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 ) имеем индекс --- cmfo cacc currency dtend безумие, предиката с currency вообще в запросе нет, значит сканируется часть индекса лишняя. Т.е. запрос потенциально можно ускорить еще и еще, если сделать "правильный" индекс или правильно фрагментировать существующий индескс. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 12:57 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Индексы в таблицах создала программерская контора, которая написала "замечательную" АБС Profix. Айтишники ничего исправлять или добавлять не будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 13:57 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
2faceИндексы в таблицах создала программерская контора, которая написала "замечательную" АБС Profix. Айтишники ничего исправлять или добавлять не будут.а фиг ли вы тогда запросы сами пишите? Естественно они работают плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 14:22 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
База создана под банковскую систему профикс. Соответственно под их потребности, в плане построения отчетов и вывода информации. Но тех возможностей, которые предоставляет профикс, недостаточно. Вот и приходится мне писать различные выборки. До этого я работал с ораклом и там изначально была правильно спроектированная база. Вот поэтому я и задал вопрос, чтобы выяснить в чем проблема: информиксе или в структуре базы. Выяснилось, что в структуре. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 17:21 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Они это пишут, поскольку им дали такую возможность. Ничего зазорного в этом нет, в крупнейшем мировом Банке (вернее в его маленькой украинской дочке) целая плеяда главбухов этим в Экселе балуется уже лет 10. Кстати насчет совета по currency, рекомендую прислушаться и явно указать, поскольку по счетам доходов операций с валютой отличной от 980 все равно не происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 17:24 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Папрашу птичку, а именно структуру ProFIX/ODB не пенять. Пеняйте на свои запросы и не знание особенностей системы. Я ее (структуру) не видел лет так 6, но судя по вашим запросам она не сильно изменилась. Из всех банковских систем, которые я видел (включая с десяток западных и десятка два украинских) - лучшая. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 17:33 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Daugava Я ее (структуру) не видел лет так 6, но судя по вашим запросам она не сильно изменилась. Из всех банковских систем, которые я видел (включая с десяток западных и десятка два украинских) - лучшая. substr(cacc,1,4) in (6010,6011,6012,6013,6014,6015,6016,6017,6018) номер счета протаскивать в таблицу проводок я бы не стал (но я вообще суррогато-пурист), хотя так делают все, но гемора из-за этого ойёй, и задрали эти ограничения по балансовым группам захардкоженные в тысяче и одной мест. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 17:52 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
DaugavaПапрашу птичку, а именно структуру ProFIX/ODB не пенять. Пеняйте на свои запросы и не знание особенностей системы. Я ее (структуру) не видел лет так 6, но судя по вашим запросам она не сильно изменилась. Из всех банковских систем, которые я видел (включая с десяток западных и десятка два украинских) - лучшая. Я сожалею, если это лучшая АБС, с которой Вы работали. Это самая убогая и ограниченная АБС. Правда я работал всего с 5 системами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 17:58 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Журавлев ДенисТ.е. запрос потенциально можно ускорить еще и еще, если сделать "правильный" индекс или правильно фрагментировать существующий индескс. Под "фрагментировать индекс" вы имеете в виду разнести части индекса по разным дискам? Что обычно выгоднее: собрать диски в raid 0 или фрагментировать самые затребованные таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2008, 22:38 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
2faceЯ сожалею, если это лучшая АБС, с которой Вы работали. Я не говорил, что это лучшая АБС это был бы уже полный оффтоп, я сказал, что у нее лучшая структура БД :). Кроме того, я не говорил, что я с ней работал, просто по роду работ приходилось конвертировать данные в/из самые различные системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2008, 10:14 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Насчет структуры БД я бы тоже поспорил. Часть таблиц "перегружены" лишними полями, некоторые очевидные связи сделаны мягко говоря странно. Индексы в таблицах, возможно, были созданы только под нужды Профикса. А т.к. набор инструментов ограничен, то возникают проблемы со скоростью выборки. До этого я работал с ораклами 9 и 10 и мссервером. Там таких проблем не было, потому что были грамотно спроектированы БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2008, 12:03 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Проектировать индексы под "другие задачи" - обязанность админа БД, а не разработчика. Да и вообще заниматься фрагментацией по условиям надо именно на конкретной инсталляции. Поскольку это все таки более менее коробочный продукт, заточенный под среднюю температуру по больнице и то, что будет хорошо Клиенту А, будет абсолютно не примлемо Клиентом Б. Знаю я вашего "Оракла", выросшего из штанишек Интербейса, но справедливости ради его базу за вымя я не щупал, врать не буду. По "МСсерверу" - есть дельные вещи, но если бы не побег в Канаду-Штаты отцов основателей, я бы их уже задушил, как минимум за структуру ConnotationValues. Кроме того, стоит учесть, что в отличие от приводимых вами двух основных конкурентов структура БД Профикса значительно старше и пережила изменение плана счетов в 98-году. Может я и ошибся в предположениях по конкретным разработчикам, но это врядли, поскольку узок круг широкораспространненых банковских АБС в Украине. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2008, 12:53 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
bk0010Журавлев ДенисТ.е. запрос потенциально можно ускорить еще и еще, если сделать "правильный" индекс или правильно фрагментировать существующий индескс. Под "фрагментировать индекс" вы имеете в виду разнести части индекса по разным дискам? Что обычно выгоднее: собрать диски в raid 0 или фрагментировать самые затребованные таблицы? Фрагментирование + PDQPRIORITY>=1 в 80% случаев будет быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2008, 20:42 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
onstatФрагментирование + PDQPRIORITY>=1 в 80% случаев будет быстрее. Спасибо. А Mirroring тоже до сих пор актуален или лучше делать RAID 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2008, 21:00 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
bk0010Под "фрагментировать индекс" вы имеете в виду разнести части индекса по разным дискам?Что обычно выгоднее: собрать диски в raid 0 или фрагментировать самые затребованные таблицы?фрагментировать -- разбить на куски. Все валим на один рейд, никаких дисков. Создаем табличку create table test_entry(acc char(20), adate date, sum decimal(20,2)) in speedtest; Наполняем execute procedure fill_te(100000); select count(*) from test_entry; 1311763 update statistics high for table test_entry; Мучать будем запрос Код: plaintext 1. 2.
Создаю хороший индекс create index ixte1 on test_entry(acc,adate) in speedtest; Estimated Cost: 31 Код: plaintext 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.
Создаем индекс фрагментированный c partition create index ixte1 on test_entry(acc) fragment by expression partition p12007 adate >= '01.01.2007' and adate < '01.04.2007' in speedtest, partition p22007 adate >= '01.04.2007' and adate < '01.07.2007' in speedtest, partition p32007 adate >= '01.07.2007' and adate < '01.10.2007' in speedtest, partition p42007 adate >= '01.10.2007' and adate < '01.01.2008' in speedtest, partition p12008 adate >= '01.01.2008' and adate < '01.04.2008' in speedtest, partition p22008 adate >= '01.04.2008' and adate < '01.07.2008' in speedtest, partition p32008 adate >= '01.07.2008' and adate < '01.10.2008' in speedtest, partition p42008 adate >= '01.10.2008' and adate < '01.01.2009' in speedtest; Estimated Cost: 103 Код: plaintext 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.
create index ixte1 on test_entry(acc) in speedtest; Estimated Cost: 645 Код: plaintext 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.
без индекса Estimated Cost: 51967 Код: plaintext 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.
хреновый индекс create index ixte1 on test_entry(acc, sum, adate) in speedtest; Estimated Cost: 34 Код: plaintext 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.
наполнял так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
тест получился плохой, дата одинаковая, и работает похоже все несколько иначе. Т.е. при фрагментированном индексе почему-то нет KEY-ONLY , зачем-то ходит в таблицу ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2008, 22:28 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Это батенька зря ... Создаем индекс фрагментированный c partition create index ixte1 on test_entry(acc) fragment by expression partition p12007 adate >= '01.01.2007' and adate < '01.04.2007' in speedtest, partition p22007 adate >= '01.04.2007' and adate < '01.07.2007' in speedtest, partition p32007 adate >= '01.07.2007' and adate < '01.10.2007' in speedtest, partition p42007 adate >= '01.10.2007' and adate < '01.01.2008' in speedtest, partition p12008 adate >= '01.01.2008' and adate < '01.04.2008' in speedtest, partition p22008 adate >= '01.04.2008' and adate < '01.07.2008' in speedtest, partition p32008 adate >= '01.07.2008' and adate < '01.10.2008' in speedtest, partition p42008 adate >= '01.10.2008' and adate < '01.01.2009' in speedtest; Попробуй фрагментировать индекс не для одного partition, а для нескольких db-пространств (in speedtest1, in speedtest2, in speedtest3, in speedtest4 и т.д) !!! С уважением, Вадим. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2008, 23:39 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
а теперь про умненького оракла который умеет substr Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
тупим однако, переписываю в like. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2008, 09:23 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
GVF112GVFЭто батенька зря ... почему? GVF112GVF Попробуй фрагментировать индекс не для одного partition, а для нескольких db-пространств (in speedtest1, in speedtest2, in speedtest3, in speedtest4 и т.д) !!!и зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2008, 20:51 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Журавлев Дениси зачем? Возможно если заставить грузиться куски индекса с разных дисков одновременно, то это позволит улучшить те удручающие результаты, которые вы привели выше. Хотя, скорее всего, скорость выполнения увеличится только если саму таблицу разнести по дискам, но стоимость запроса при этом уменьшится вряд ли. То, что не стоит фрагментировать данные на RAIDе вы показали очень убедительно: никак не ожидал, что стоимость при этом вырастет не на проценты, а в разы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2008, 22:13 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
bk0010 Возможно если заставить грузиться куски индекса с разных дисков одновременно, то это позволит улучшить те удручающие результаты, которые вы привели выше. Хотя, скорее всего, скорость выполнения увеличится только если саму таблицу разнести по дискам, но стоимость запроса при этом уменьшится вряд ли. То, что не стоит фрагментировать данные на RAIDе вы показали очень убедительно: никак не ожидал, что стоимость при этом вырастет не на проценты, а в разы.бред какой-то, я показывал обратное, видимо никто не понимает что такое фрагментация и для чего ее применять. ртфм. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2008, 08:34 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
bk0010Журавлев Дениси зачем? Возможно если заставить грузиться куски индекса с разных дисков одновременно, то это позволит улучшить те удручающие результаты, которые вы привели выше. Хотя, скорее всего, скорость выполнения увеличится только если саму таблицу разнести по дискам, но стоимость запроса при этом уменьшится вряд ли. То, что не стоит фрагментировать данные на RAIDе вы показали очень убедительно: никак не ожидал, что стоимость при этом вырастет не на проценты, а в разы. Денис совсем о другом хотел сказать. Вопрос заключается в том, что если есть однозначное попадание ключа индекса в один фрагмент, значит должен читаться только один фрагмент, а не 4. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2008, 10:26 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Я хотел сказать что для таблицы с проводками, необходим индекс (счет,дата), но для квартальных отчетов при большом объеме таблицы (например от 500 млн записей), неплохо заиметь фрагментацию этого индекса (таблицу можно не фрагментировать, хотя при этом появляется опасность напороться на ограничения информикса). В 2008 году -- диски шпинделя раиды роли не играют. Еще можно заиметь таблицу счет, где балансовая группа -- отдельное индексированное поле тогда: select dmfo, dacc, cmfo, cacc, amountuak from vpayord, счет where счет.балансовая_группа in (6010,6011,6012,6013,6014,6015,6016,6017,6018) and счет.id = vpayord.счетid and cmfo=config_getkey('MFO','COMMON') and dtend between MDY(3,1,2008) and MDY(3,31,2008) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2008, 10:36 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Журавлев ДенисЯ хотел сказать что для таблицы с проводками, необходим индекс (счет,дата), но для квартальных отчетов при большом объеме таблицы (например от 500 млн записей), неплохо заиметь фрагментацию этого индекса (таблицу можно не фрагментировать, хотя при этом появляется опасность напороться на ограничения информикса). В 2008 году -- диски шпинделя раиды роли не играют. Если обслуждать кулинарию приготовления отчетов, то индексов на все отчеты ненапасешся, Я считаю что таблицу нужно фрагментировать, а отчеты можно и фулсканом прогнать, только следить за тем что бы база читала только один или нужный список фрагментов. p.s. По поводу раидов и шпинделей не согласен, но спорить не буду ибо оффтопик относительно substr. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2008, 10:59 |
|
Проблема с substr?
|
|||
---|---|---|---|
#18+
Есть в этой БД таблица "Счет", и поле "балансовый счет" в этой таблице есть, вернее его id. Кстати не помню какие там индексы на payord-е, но "config_getkey('MFO','COMMON')" жизнь не облегчает. В особенности если скрипт пишется для себя, то возможно имеет смысл указать конкретное МФО тупо в лоб, поскольку МФО имеет шансы пережить сам запрос. Хотя в общем случае это и плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2008, 16:50 |
|
|
start [/forum/topic.php?all=1&fid=44&tid=1607978]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
71ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
others: | 329ms |
total: | 528ms |
0 / 0 |