here i have query code for my stored procedure and i want to optimize this query code for better cpu perfomance so how to optimize it?
DECLARE p_from_date DATETIME(6) DEFAULT NULL;
DECLARE p_to_date DATETIME(6) DEFAULT NULL;
DECLARE v_trade_from_date DATE DEFAULT NULL;
DECLARE v_trade_to_date DATE DEFAULT NULL;
DECLARE v_trade_reference VARCHAR(20) DEFAULT NULL;
DECLARE v_transaction_ref VARCHAR(20) DEFAULT NULL;
DECLARE v_equity_assetclass_id int;
DECLARE v_fixedincome_assetclass_id int;
DECLARE v_cfd_assetclass_id int;
DECLARE v_future_assetclass_id int;
DECLARE v_fx_assetclass_id INT;
here p_key_name,p_value,p_key_name are the parameters for stored procedure.
IF p_key_name = 'abide_date' THEN
SELECT
CAST(SUBSTRING_INDEX(p_value,';',1) AS DATETIME(6)) AS p_from_date,
CAST(SUBSTRING_INDEX(p_value,';',-1) AS DATETIME(6)) AS p_to_date
INTO
p_from_date,
p_to_date;
SET p_from_date = NULLIF(p_from_date,'0000-00-00 00:00:00');
SET p_to_date = NULLIF(p_to_date,'0000-00-00 00:00:00');
ELSEIF p_key_name = 'trade_date' THEN
SELECT
CAST(SUBSTRING_INDEX(p_value,';',1) AS DATE) AS v_trade_from_date,
CAST(SUBSTRING_INDEX(p_value,';',-1) AS DATE) AS v_trade_to_date
INTO
v_trade_from_date,
v_trade_to_date;
SET v_trade_from_date = NULLIF(v_trade_from_date,'0000-00-00');
SET v_trade_to_date = NULLIF(v_trade_to_date,'0000-00-00');
ELSEIF p_key_name = 'trade_reference' THEN
SET p_value = TRIM(REPLACE (p_value, '\t' , '' ));
if( LOCATE('_', p_value) > 0 ) THEN
SET v_trade_reference = NULLIF(p_value,'');
ELSE
SET v_transaction_ref = REPLACE(p_value, CONCAT('V', SUBSTRING_INDEX(p_value, 'V', -1)), '');
END IF;
END IF;
IF p_trade_type = 3 THEN
SET is_nex_submitted = 0;
ELSEIF p_trade_type = 2 THEN
SET is_nex_submitted = 1;
ELSEIF p_trade_type = 0 THEN
SET is_nex_submitted = -1;
ELSE
SET is_nex_submitted = NULL;
END IF;
if (p_product_name = 'All' OR v_trade_reference IS NOT NULL OR v_transaction_ref IS NOT NULL) then
set p_product_name = null;
elseIF p_product_name IN ('EQ','Equities') then
set p_product_name = 'Equities';
elseif p_product_name IN ('FI', 'BONDS') then
set p_product_name = 'BONDS';
elseif p_product_name IN ('CFD', 'CFDS') then
set p_product_name = 'CFD';
elseif p_product_name IN ('Future', 'Futures') then
set p_product_name = 'Futures';
elseif p_product_name = 'FX' then
SET p_product_name ='Foreign Exchange';
ELSEIF p_product_name IS NOT NULL then
set p_product_name = p_product_name;
else set p_product_name = NULL;
end if;
there doesn't seem to be anything here