我想知道是否可以加快这个 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/