我对 MariaDB 10.1.26 运行了以下 SQL 语句,其中约 2.000 行具有即时结果。
select value, datetime from Schuppen
where (value = (select min(value) from Schuppen where (measure = 'temp')
and datetime between '2018-11-01 00:00:00' and '2018-11-02 00:00:00'))
and datetime between '2018-11-01 00:00:00' and '2018-11-02 00:00:00';
当我将以下语句与日期时间字段的变量一起使用时,执行时间约为 5.5 秒。
set @startdate = cast('2018-11-01 00:00:00' as datetime);
set @enddate = cast('2018-11-02 00:00:00' as datetime);
select value, datetime from Schuppen
where (value = (select min(value) from Schuppen where (measure = 'temp')
and datetime between @startdate and @enddate))
and datetime between @startdate and @enddate;
我拥有的数据行越多,执行该语句所需的时间就越长。变量似乎以某种方式改变了语句的行为。
这里有什么问题吗?
最佳答案
我使用 MySQL Workbench,@variables 对于查询/搜索给定属性的不同表非常有用。我遇到了类似的问题。在搜索不同的线程并尝试不同的东西之后,当我将 @variable 设置为与我正在搜索的表中的列完全相同的类型和相同的编码时,它运行良好那个变量。
例如:
SET @keyword = CONVERT(CAST("KEYWORD" AS CHAR(8)) USING ASCII);
在这种情况下,我的表 customer 中的搜索列 cname 是 CHAR(8) 类型并使用 ASCII 编码:
SELECT * FROM CUSTOMERS WHERE cname=@keyword;
如果你有多个表要查询,其中一个表的cname是CHAR(10),另一个表是CHAR(8),那么你可以这样做:
SET @keyword = "KEYWORD";
SELECT * FROM CUSTOMERS WHERE cname=CONVERT(CAST(@keyword AS CHAR(8)) USING ASCII);
SELECT * FROM EMPLOYEES WHERE cname=CONVERT(CAST(@keyword AS CHAR(10)) USING ASCII);
关于mysql - 使用变量时慢的sql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53462728/