如何优化这个临时表查询?

时间:2014-02-13 06:10:25

标签: php mysql

我编写了一个存储过程,它将逗号分隔值作为输入和另一个值。我遍历逗号分隔值中的值,然后为每个值运行查询。现在我需要返回结果,所以我想把结果存储在临时表中,然后从那个临时表中选择值。但这花了太长时间。

对于具有163个逗号分隔值的查询,它需要7秒。 对于具有295个逗号分隔值的查询,它需要12秒。

这是程序: -

DELIMITER $
create procedure check_fbid_exists(IN myArrayOfValue TEXT, IN leaderID INT(11) ) 
BEGIN

DECLARE status TINYINT(1);
DECLARE value INT(11);
DECLARE pos int(11);

CREATE TEMPORARY TABLE fbid_exists_result (userID int(11), status tinyint(1));
WHILE (CHAR_LENGTH(myArrayOfValue) > 0)
DO
 SET pos=LOCATE(  ',', myArrayOfValue);

IF pos>0 THEN
SET value = LEFT(  myArrayOfValue,pos-1 );
SET myArrayOfValue= SUBSTRING( myArrayOfValue,pos+1 );                                                                                                    
ELSE
SET value = myArrayOfValue;
  SET myArrayOfValue='';
 END IF;

 SELECT EXISTS(SELECT 1 FROM users_followings WHERE UserID=value and       LeaderUserID=leaderID LIMIT 1) INTO status;
     insert into fbid_exists_result VALUES(value,status); 


  END WHILE;
 SELECT * FROM  fbid_exists_result ; 
DROP TEMPORARY TABLE IF EXISTS fbid_exists_result ;       

 END$

0 个答案:

没有答案