MySQL 函数占用太多 CPU

标签 mysql sql stored-procedures cpu-usage

当我在 MySQL 查询浏览器中执行函数时,它给出错误消息,这是“ “脚本行:3 在查询期间失去与 MySQL 服务器的连接”,即使我也无法删除它。当我执行或尝试将其删除时,我的查询浏览器卡住了。函数代码如下

参数应该是这样的 - ('52,53,50')

DELIMITER $$

DROP FUNCTION IF EXISTS `split_string` $$
CREATE FUNCTION `split_string`(sStrMain VARCHAR(255)) RETURNS varchar(255) CHARSET latin1
BEGIN
DECLARE n,l INT DEFAULT 0;
DECLARE L1,str,temp,L2,res,Final_res VARCHAR(255);


SET str = sStrMain;

WHILE str !='' DO
  SET L1 = SUBSTRING(str,1,LOCATE(',',str)-1);
  SET res = lookup_code(L1);
  SET Final_res = CONCAT_WS(',',Final_res,res);
  SET temp = REPLACE(str,SUBSTRING(str,1,L1,'');
  SET str = temp;
  SET temp = '';
  SET n = n + 1;
END WHILE;


RETURN Final_res;

END $$

DELIMITER ;

我将使用此函数通过分隔符(逗号)分割字符串并返回结果。

最佳答案

尝试这个分割文本程序 -

CREATE PROCEDURE split_string(sStrMain VARCHAR(255))
BEGIN
  SET @strLen := 0;
  SET @i := 1;

  WHILE @strLen < LENGTH(sStrMain)  DO
    SET @str = SUBSTRING_INDEX(sStrMain, ',', @i);
    SET @strLen = LENGTH(@str);
    SET @i = @i + 1;

    SET @res = SUBSTRING_INDEX(@str, ',', -1);
    SELECT @res; -- Show a value, call your function here

  END WHILE;
END

关于MySQL 函数占用太多 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10117973/

相关文章:

mysql - 如何将 SELECT 语句的返回值传递给存储过程中的 DELETE 查询?

sql-server-2008 - 如何在 SQL Server 2008 中将临时数据从触发器传递到存储过程

sql - 如何删除关联SQL表中的行?

mysql - 我有一个Sum(),其中a.name = b.name,我想选择最高的Sum() : How?的名称

c++ - 桌面应用程序的嵌入式数据库问题

sql - 临时表整理冲突 - 错误 : Cannot resolve the collation conflict between Latin1* and SQL_Latin1*

mysql - SUM 相关表中的时间值

mysql - 这可以在一个查询中完成吗?

php - 不知道如何让它看起来像

mysql - 如何在 mysql 连接中选择可能不存在的行