mysql - 加速 MySQL 存储例程

标签 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 单行程序可以解决这个问题,但我一直无法弄明白。

非常感谢任何帮助!!

谢谢!

顺便说一句,实际数据库中的列名要好得多,但我不能和大家分享。

最佳答案

实际上,除非我遗漏了什么,否则看起来并没有那么慢。你能在“takes a while”中定义“a while”吗?

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

您在应用程序中究竟如何调用过程?您正在重用数据库连接,对吧?

如果您还没有,能否将多个调用捆绑到一个事务中?

关于mysql - 加速 MySQL 存储例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3286379/

相关文章:

mysql - Doctrine 2 - float 后两位小数?

sql - MySQL ORDER问题

Java:如何通过调用父类来获取子类的对象

sql-server - Nvarchar的性能要比varchar好吗?

iphone - 在 iPhone 应用程序中保存数据并下次读取数据的最快方法是什么?

mysql - 在 mysql 中存储数据的最佳方法?

mysql - rails : how to insert unique value into the database without duplication?

mysql - 对大量行运行 SUM

android - 我的Android应用首次打开时需要很长时间才能加载

jquery - 跨浏览器图表库