繁体   English   中英

MySQL存储过程执行需要很长时间

[英]MySQL Stored Procedure execution takes a long time

我正在尝试通过存储过程将行插入到 db 表中。 我的表包含超过 500000 行,因此当我执行该过程时,执行时间超过 4 小时。 知道我使用Xampp 服务器MySQL作为数据库管理系统和HeidiSQL来操作数据库。 您可以在下面看到过程脚本。 代码是否有任何问题,或者我应该添加其他内容。 提前感谢您的帮助。

BEGIN
DECLARE finished  INTEGER DEFAULT 0;
DECLARE post_id BIGINT;    
DECLARE v_id  BIGINT;
DECLARE done INT DEFAULT 0;
DECLARE msg varchar(10000) DEFAULT "";
DEClARE post_cursor CURSOR FOR
SELECT distinct po.post_id FROM wp_postmeta po;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION  SET finished = 2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

Open post_cursor;
get_posts: LOOP
FETCH post_cursor INTO post_id;
select CONCAT('postid', post_id) ;
IF done = 1 THEN
LEAVE get_posts;
END IF;
SET v_id = (select MAX (meta_id) from wp_postmeta) +1 ;
INSERT INTO   wp_postmeta (meta_id, post_id, meta_key, meta_value) VALUES (v_id, post_id ,"_company_name", "blabla");
SET done = 0;
END LOOP;

CLOSE post_cursor;
END

我会这样做:

INSERT INTO wp_postmeta (post_id, meta_key, meta_value) 
 SELECT id, '_company_name', 'blabla'
 FROM wp_posts;

不需要游标,只需依靠 INSERT...SELECT。

不需要 DISTINCT,因为您知道wp_posts表中的每个帖子只有一行。

不需要max(meta_id)+1 ,只需依靠自动增量来完成它的工作。

wp_postmeta 在 meta_id 上有一个 auto_incrememnt,所以使用

重点是GROUP BY保证只插入 1 个帖子 _id

 CREATE TABLE wp_postmeta (meta_id int AUTO_INCREMENT PRIMARY KEY, post_id int, meta_key VARCHAR(20), meta_value VARCHAR(20))
 INSERt into wp_postmeta ( post_id, meta_key, meta_value) VALUEs (1,'teata','testb'),(1,'teata','testb'),(2,'teata','testb'),(2,'teata','testb')
 INSERT INTO wp_postmeta ( post_id, meta_key, meta_value) SELECT po.post_id ,"_company_name", "blabla" FROM wp_postmeta po GROUP BY po.post_id
 SELECT * FROM wp_postmeta
\n meta_id |  post_id | 元键 | 元值\n ------: |  ------: |  :------------ |  :---------\n       1 |  1 | 茶 | 测试b     \n       2 |  1 | 茶 | 测试b     \n       3 |  2 | 茶 | 测试b     \n       4 |  2 | 茶 | 测试b     \n       5 |  1 |  _company_name | 布拉布拉    \n       6 |  2 |  _company_name | 布拉布拉    \n

db<> 在这里摆弄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM