存储过程 - SLOW插入+可能的VAR冲突

时间:2015-10-06 16:35:34

标签: mysql stored-procedures insert mysql-routines

我正在开发一个基本上由两个表组成的消息传递系统:CONVERSATIONS和MESSAGES。该过程检查是否存在会话,如果存在会话,则将会话ID保存到VAR中并将其用于消息插入。如果没有,它会在会话表中创建一个条目,并使用最后一个ID作为MESSAGES表的条目值。

到目前为止,它的工作正常,但我有两个问题:

  • 在我无知的观点中,如果更多用户在同一时间调用该过程,那么如此定义的VARS @last_id和@conv_id可能会引发某种冲突。想象@last_id设置为40,在插入发生之前,其他用户调用相同的过程并将该值设置为41 ..这是否可能???

  • 这个INSERT程序看起来很缓慢,一旦缓存虽然看起来好一点但我对它不满意。在INDEXING旁边有没有解决方案?

谢谢。

DELIMITER //

CREATE PROCEDURE chat_insert(id1 INT, id2 INT, text VARCHAR(250))

BEGIN
SELECT id INTO @conv_id FROM conversations WHERE 

(user_id_one = id1 AND user_id_two = id2) 

 OR  (user_id_one = id2 AND user_id_two = id1) LIMIT 1;  

IF(@conv_id IS NOT NULL)    

THEN

    INSERT INTO messages (conversations_id,user_id,text) 
     VALUES (@conv_id,id1,text);

    ELSE

            INSERT INTO conversations (user_id_one,user_id_2) 
            VALUES (id1,id2);
            SET @last_id = LAST_INSERT_ID();
             INSERT INTO messages (conversations_id,user_id,text) 
            VALUES (@last_id,id1,text);
    END IF;
END 
//

0 个答案:

没有答案