加速MySQL存储的例程

时间:2010-07-20 01:32:15

标签: mysql performance

我想知道是否有可能加快这个MySQL查询。目前,我称它为20,000次以上,并且需要一段时间才能运行(一段时间大约需要10到20分钟)。

这是基本的表格布局:

db1:
INT(11) id
VARCHAR(45) col1
VARCHAR(100) col2
VARCHAR(100) col3

db2:
VARCHAR(45) id

db3:
VARCHAR(45) fk_db2
INT(11) fk_db1

这是存储的例程:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc`(IN fk VARCHAR(45),
                                            IN a VARCHAR(45),
                                            IN b VARCHAR(100),
                                            IN c VARCHAR(65))
BEGIN
    SET @id=0;
    SELECT id INTO @id FROM db1 WHERE db1.col1=a
                                AND db1.col2=b
                                AND db1.col3=c;
    IF @id=0 THEN
        INSERT INTO db1 (col1, col2, col3)
            VALUES (a, b, c);
        SELECT LAST_INSERT_ID() INTO @id;
    END IF;

    -- Association table for db2 and db1.
    INSERT IGNORE INTO db3 (fk_db1, fk_db2) 
        VALUES(@id, fk);
END

这个例程的要点是,我想获取特定记录的ID,或者如果它不存在则创建一个。然后我想关联传入的fk和我刚刚发现的ID。我确信这有一个MySQL单行程,但我一直无法弄明白。

非常感谢任何帮助!!

谢谢!

顺便说一下,实际数据库中列的名称要好得多,但我不能与你们共享这些名称。

1 个答案:

答案 0 :(得分:2)

实际上,除非我遗漏了某些东西,否则看起来并不那么慢。你能在“需要一段时间”中定义“一段时间”吗?

你有关于col1 / col2 / col3的索引吗?

您究竟如何在申请中调用该程序?您正在重用数据库连接,对吗?

如果你还没有,可以将多个电话捆绑到一个交易中吗?