我想知道是否有可能加快这个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单行程,但我一直无法弄明白。
非常感谢任何帮助!!
谢谢!
顺便说一下,实际数据库中列的名称要好得多,但我不能与你们共享这些名称。
答案 0 :(得分:2)
实际上,除非我遗漏了某些东西,否则看起来并不那么慢。你能在“需要一段时间”中定义“一段时间”吗?
你有关于col1 / col2 / col3的索引吗?
您究竟如何在申请中调用该程序?您正在重用数据库连接,对吗?
如果你还没有,可以将多个电话捆绑到一个交易中吗?