[英]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.