कैसे इन्फोर्मिक्स पर समारोह और अनुक्रमण का उपयोग कर एक प्रश्न तेजी लाने के लिए

वोट
0

इन्फोर्मिक्स डीबीएमएस के तहत मैं इस क्वेरी में तेजी लाने की जरूरत है:

set isolation to dirty read;
SELECT NVL(hr_dati1, '---'), NVL(cm_t_stoc, -1) as type,
LPAD(cm_mod,3, 0)||LPAD(cm_col,3, 0) as coord,
NVL(cm_segmento, 0) as seg, NVL(cm_lres, 0) 
FROM informix.artind, informix.coordman
LEFT OUTER JOIN informix.hmdescr ON cm_t_stoc = hr_key_soc AND 
hr_key_pref = 'MGZ' AND hr_key_suff = 'STOCC'
WHERE cm_magaz = '5' AND ad_code = '2065498' AND 
((cm_code = '2065498') OR
((cm_code = ad_coor_r) AND ( SUBSTR(NVL(ad_coor_r, ' '), 1, 2) = 'MU' )
AND
( SUBSTR(NVL(cm_code, ' '), 1, 2) = 'MU' ) ))
ORDER BY type, seg, coord;

ऊपर क्वेरी तेजी से जब मैं फिल्टर के रूप में इस्तेमाल किया था केवल

(cm_code = '2065498')

के बजाय

((cm_code = '2065498') OR
((cm_code = ad_coor_r) AND ( SUBSTR(NVL(ad_coor_r, ' '), 1, 2) = 'MU')      
AND
( SUBSTR(NVL(cm_code, ' '), 1, 2) = 'MU' ) ))

लेकिन अब एक मैं इस नई शर्त जोड़ने की जरूरत है।

एक अनुकूलन के लिए खोज में, और मुझे विश्वास है कि सुस्ती substr मैं इस समारोह बनाया है की वजह से है:

create function informix.substr2_ad_coor_r(coor_r char(8))
  returning char(8) with (NOT VARIANT);
  return substr(coor_r, 1, 2);
end function;

और इन सूचकांकों:

create index informix.artind_idx_sub_coor_r on informix.artind
 ( informix.substr2_ad_coor_r(ad_coor_r));

create index informix.coordman_idx_sub_codifa on informix.coordman
 ( informix.substr2_ad_coor_r(cm_codifa));

लेकिन मैं गति पर्याप्त सुधार नहीं हुआ है, यह भी अजीब बात है कि क्वेरी तेजी से लगता है कि अगर मैं का उपयोग फिल्टर हालत, substr जैसे में, है। (SUBSTR(NVL(ad_coor_r, ' '), 1, 2) = 'MU') बजाय substr2_ad_coor_r जैसे की।substr2_ad_coor_r(ad_coor_r) = 'MU'

19/09/2018 को 13:32
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

मैं 2 में विभाजित करने यूनियन का उपयोग करके क्वेरी को गति:

set isolation to dirty read;
SELECT NVL(hr_dati1, '---'), NVL(cm_t_stoc, -1) as type,
LPAD(cm_mod,3, 0)||LPAD(cm_col,3, 0) as coord,
NVL(cm_segmento, 0) as seg, NVL(cm_lres, 0)
FROM informix.artind, informix.coordman
LEFT OUTER JOIN informix.hmdescr ON cm_t_stoc = hr_key_soc AND
hr_key_pref = 'MGZ' AND hr_key_suff = 'STOCC'
WHERE cm_magaz = '5' AND ad_code = '2065498' AND
(cm_code = '2065498')
UNION
SELECT NVL(hr_dati1, '---'), NVL(cm_t_stoc, -1) as type,
LPAD(cm_mod,3, 0)||LPAD(cm_col,3, 0) as coord,
NVL(cm_segmento, 0) as seg, NVL(cm_lres, 0)
FROM informix.artind, informix.coordman
LEFT OUTER JOIN informix.hmdescr ON cm_t_stoc = hr_key_soc AND
hr_key_pref = 'MGZ' AND hr_key_suff = 'STOCC'
WHERE cm_magaz = '5' AND ad_code = '2065498' AND
((cm_code = ad_coor_r) AND ( SUBSTR(NVL(ad_coor_r, ' '), 1, 2) = 'MU' )
AND
( SUBSTR(NVL(cm_code, ' '), 1, 2) = 'MU' ) )
ORDER BY 1, 3, 2;
01/10/2018 को 08:34
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more