gpt4 book ai didi

mysql - 在 WHERE 子句中使用变量会导致查询永远持续

转载 作者:行者123 更新时间:2023-11-29 01:05:28 26 4
gpt4 key购买 nike

我遇到了在 mysql 查询的 WHERE 子句中使用变量的问题。我试着用谷歌搜索,但找不到任何答案。

在 MySQL 脚本的开头,我将一些值赋给一个变量,然后在查询中的多个位置使用该变量。在一个特定的子查询中,如果我使用变量,查询将继续运行,但如果我使用变量的常量值,查询将在一秒钟内运行。

请看下面的例子。这里我在 WHERE 子句中使用变量 @maxid

set @maxid2 = '1001-a';
select distinct
dc.db_date,
dc.year_month,
dc.year,
dc.week,
dc.day,
dc.dayofweek - 1 as DayOfWeek,
em.ID as EmployeeID,
concat_ws(' ', em.`FirstName`, `LastName`) as EmployeeName
from
datavis_cal dc
cross join
employees_data em ON em.ID = @maxid2
and dc.db_date >= (select
min(assigndate)
from
attendance_data
where
ID = @maxid2)
and db_date <= curdate()
and em.DeptID = (select distinct
DeptID
from
users
where
username = 'demo')

此代码继续运行,我必须取消查询。现在看看下面的查询。这是相同的查询,但这里我使用的是变量的常量值而不是变量。我在脚本中用它的值 '1001-a' 替换了变量 @maxid2:

set @maxid2 = '1001-a';
select distinct
dc.db_date,
dc.year_month,
dc.year,
dc.week,
dc.day,
dc.dayofweek - 1 as DayOfWeek,
em.ID as EmployeeID,
concat_ws(' ', em.`FirstName`, `LastName`) as EmployeeName
from
datavis_cal dc
cross join
employees_data em ON em.ID = '1001-a'
and dc.db_date >= (select
min(assigndate)
from
attendance_data
where
ID = '1001-a')
and db_date <= curdate()
and em.DeptID = (select distinct
DeptID
from
users
where
username = 'demo')

所以我的问题是,变量可能对它继续运行的脚本做了什么,但变量的值会在一秒钟内给出结果?

如果我需要对此进行更多解释,请告诉我。我尝试了很多解决方案,也搜索了谷歌,但找不到任何答案。

最佳答案

尝试将值分配放在查询中:

select aCol
from myTable, (SELECT @value := 2) as a
where aCol = @value;

这样我的 MariaDB 就可以在 'aCol' 列上使用索引

关于mysql - 在 WHERE 子句中使用变量会导致查询永远持续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25827962/

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