我在 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 设置为完全相同的类型时,效果很好and与我正在搜索该变量的表中的列相同的编码。
例如:
SET @keyword = CONVERT(CAST("KEYWORD" AS CHAR(8)) USING ASCII);
在本例中,我的表 customer 中的搜索列 cname 为 CHAR(8) 类型并使用 ASCII 编码:
SELECT * FROM CUSTOMERS WHERE cname=@keyword;
如果要查询多个表,其中一个表中的 cname 为 CHAR(10),另一个表中的 cname 为 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)