簡體   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