gpt4 book ai didi

mysql - 从 SELECT 语句中调用 MySQL 函数比从命令提示符单独调用函数花费的时间要多得多

转载 作者:行者123 更新时间:2023-11-29 02:47:43 24 4
gpt4 key购买 nike

我在mysql中有如下函数

CREATE FUNCTION `get_project_uuid`(project_kee varchar(400)) RETURNS varchar(50) CHARSET utf8
BEGIN
declare v_project_uuid varchar(50);
select project_uuid into v_project_uuid from projects where scope='PRJ' and kee=project_kee;
RETURN v_project_uuid;
END

当我直接从 mysql 命令提示符运行此函数时,它会在几毫秒内运行,但当我在另一个 select 语句中使用此函数时,执行该 hosing select 语句大约需要 2-3 分钟。

select * from issues where project_uuid = get_project_uuid('Project1')

但是,当我从函数中获取 select 语句并直接在宿主 select 语句中使用它而不是函数调用时,它会在几毫秒内工作。

select * from issues where project_uuid = (
select project_uuid from projects
where scope='PRJ' and kee='Project1'
)

使用该函数花费如此长的时间似乎很不寻常。现在由于时间较长,我被迫不使用该功能。我错过了什么吗?

最佳答案

当您从命令行调用 get_project_uuid() 函数时,它只调用一次,因此运行速度更快。

当您在 select 语句(即问题的第二个代码部分)中使用此函数时,根据您的语句,可能会为 issue 表中使用的每一行调用此函数外部选择语句。现在,如果 issue 表有很多行,可能需要更长的时间来执行。

最后,对于第三个代码块,它可以更快,因为 mysql 不会为问题表的每一行运行内部选择语句。这是通过使用来自内部 select 语句的相同值作为优化的一部分完成的。

如果您想使用该函数并且仍然希望它更快,您可以将该函数声明为确定性。在给定相同输入的情况下始终生成相同输出的函数可以声明为确定性的。现在你必须决定这是否适用于你的情况。如果您错误地将非确定性函数声明为确定性函数,Mysql 不会报错。但是这样做会得到错误的结果。

关于mysql - 从 SELECT 语句中调用 MySQL 函数比从命令提示符单独调用函数花费的时间要多得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39835819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com