代码之家  ›  专栏  ›  技术社区  ›  KLee1

加速MySQL存储例程

  •  1
  • KLee1  · 技术社区  · 14 年前

    我想知道是否有可能加快这个MySQL查询的速度。目前,我称之为20000+次,它需要一段时间运行(一段时间约为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 回复  |  直到 14 年前
        1
  •  2
  •   Nicholas Knight    14 年前

    事实上,除非我遗漏了什么,否则这看起来没那么慢。你能在“需要一段时间”中定义“一段时间”吗?

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

    在你的申请中你到底是如何调用这个过程的?你在重用数据库连接,对吗?