0

単一のテーブルからデータを取得する mysql のクエリがあります。テーブルには 450 万行と必要なすべてのインデックスが含まれています。

SQLYog からクエリを実行すると、0.016 秒かかります。しかし、クエリをストアド プロシージャに埋め込んでストア プロシージャを実行すると、34 秒かかります。

手続きに時間がかかる理由を教えてください。

プロシージャの有無にかかわらず、クエリの実行プランは同じです。

手順のコードは次のとおりです。

DELIMITER $$

USE `centraldb`$$

DROP PROCEDURE IF EXISTS `sa4_getparticipatingvehiclestset111`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sa4_getparticipatingvehiclestset111`(IN paramlicencetag VARCHAR(15),IN paramparticipantid INT)
BEGIN

SET @s = CONCAT('SELECT `LicenceTag`,`ParticipantId`,(SELECT `From_Datetime` FROM participant_licencetag WHERE `LicenceTag`=p.LicenceTag AND `Participant_Indicator`=\'DN\' AND ParticipantId = p.ParticipantId limit 1) AS dn_from_datetime,(SELECT `To_Datetime` FROM participant_licencetag WHERE `LicenceTag`=p.LicenceTag AND `Participant_Indicator`=\'DN\' AND ParticipantId = p.ParticipantId limit 1) AS dn_to_datetime,(SELECT `From_Datetime` FROM participant_licencetag WHERE `LicenceTag`=p.LicenceTag AND `Participant_Indicator`=\'ED\' AND ParticipantId = p.ParticipantId limit 1) AS ed_from_datetime,(SELECT `To_Datetime` FROM participant_licencetag WHERE `LicenceTag`=p.LicenceTag AND `Participant_Indicator`=\'ED\' AND ParticipantId = p.ParticipantId limit 1) AS ed_to_datetime
 FROM `participant_licencetag` p');

    PREPARE stmt2 FROM @s;
    EXECUTE stmt2;
    DEALLOCATE PREPARE stmt2;


END$$

DELIMITER ;
4

0 に答える 0