使用变量时sql语句速度慢

2024-07-01

我在 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(使用前将#替换为@)

使用变量时sql语句速度慢 的相关文章

  • 撤消日志错误:系统表空间中没有剩余空间用于分配撤消日志页

    我正在使用以下命令将 csv 文件导入到 mysql 数据库中的表中加载数据到文件中命令 csv 文件相当大 大约 10 Gig 在导入过程中 我收到以下错误 撤消日志错误 系统表空间中没有剩余空间用于分配撤消日志页 请向表空间添加新的数据
  • Mysql 选择主键 = x 的记录

    我的 mysql 表中有一个主键 它由三列组成 CREATE TABLE IF NOT EXISTS bb bulletin OfficeCode int 5 NOT NULL IssuerId int 11 NOT NULL Bullet
  • Zend DB Select 具有多个表联接

    尝试使用复制以下查询Zend Db Select 有什么指点吗 SELECT compounds id as compounds id reactions id as reactions id reaction compound numbe
  • 限制最大值和分组依据返回太多行

    我正在使用 SQL Server 数据库 给出以下查询 我试图获得每个班级的最高分 这Scores表有 50 行用于两个类 所以我总共需要 2 行 但是 因为我有Scores Id 它返回每一行Scores since Scores Id是
  • 是否可以插入然后依次选择插入的行?

    我执行两个查询相继 一种是INSERT 另一种是SELECT 选择插入的行 尽管该行已成功插入 我可以在数据库中看到它 但选择查询无法返回该行 当我再次执行 SELECT 查询时 它返回正确的结果 Insert stmt pdo gt pr
  • MySQL:选择具有适用于多行的条件的记录

    我有一张桌子 DETAILS ID PARENT ID DATA KEY DATA VALUE 1 1 Guitar 4 2 1 Radio 2
  • Mysql Slave 未更新

    我已经设置了复制 一切看起来都很好 我没有错误 但数据没有被移动到从站 mysql gt show slave status G 1 row Slave IO State Waiting for master to send event M
  • 提高mmap memcpy文件读取性能

    我有一个从文件中顺序读取数据的应用程序 有些是直接从指向的指针读取mmaped 文件和其他部分是memcpyed 从文件到另一个缓冲区 我注意到在进行大型操作时性能不佳memcpy我需要的所有内存 1MB 块 以及在执行大量较小操作时的更好
  • 对于 Android 开发,我可以在图像视图上使用 JPG 图像而不是 PNG 图像吗?

    这个问题的主要目的是了解考虑以下场景 在 Android 开发中选择 PNG 和 JPG 的最佳选择是什么 1 使用jpg图像作为背景是一个好的选择吗 2 与 png 相比 jpg 图像的加载时间会更长吗 3 与 png 相比 jpg 会花
  • MySQL插入固定值和多select结果的数据

    假设我有一个如下所示的表结构 通知表 id receiver id type content time 接收者 ID 来自用户表 用户表 id username 内容和时间来自广播表 广播表 id content time 因此 当我需要插
  • 与选择顶部相反

    Transact SQL 有一个方便的SELECT TOP 4 whatever FROM 我想做一个 SELECT 查询 返回表中的最后 n 个条目 而不是第一个条目 这是我用来返回在表中输入的前四个项目的查询 使用 SELECT TOP
  • 向 SQL Server 用户授予执行权限以仅运行特定作业

    我请求创建可由特定 SQL 用户运行的 SQL Server 代理作业 如何在不授予用户执行权限的情况下完成此操作sp start job存储过程意味着他也可以运行所有其他禁止的作业 如果不授予用户对 sp start job 存储过程的执
  • 删除一行或多行后,在 auto_increment 列上使用下一个可能的主键

    我有一个带有主键 自动增量 ID 列的表 当我删除具有最高 ID 的行 例如 ID 100 时 我想仅使用 mysql 触发器将该 ID 100 用于新行 我怎么做 当我删除时 例如 ID 1 并且最高 ID 是 100 我不想再次使用 I
  • phpMyAdmin 处理请求时出错错误代码:500 错误文本:内部服务器错误[重复]

    这个问题在这里已经有答案了 当我运行 phpMyAdmin 并单击导出 导入时 我总是收到错误 处理请求时出错 错误代码 500 错误文本 内部服务器错误 操作系统 Ubuntu 18 04 我遇到了问题 我的 php 版本是7 2 实际上
  • 将.IBD文件导入MySQL服务器

    我正在尝试找到一种方法将 旧复制的 ibd 文件导入到新安装的 MYSQL Server 8 0 中 您需要了解exact表的结构 CREATE TABLE陈述 创建具有相同结构的表 Run ALTER TABLE table name D
  • PHP / MySQL 查询电子邮件地址时出错

    我一直在尝试使用以下语句查询电子邮件地址 但是在尝试成功转义字符串几个小时后 我已经接受了失败 我正在使用的查询是 SELECT id email FROM user WHERE email email 这给了我一个错误 MySQL 错误
  • Hibernate 中的枚举,作为枚举持久存在

    在我的 MySQL 数据库中 有一列 gender enum male female 我创建了我的枚举 com mydomain myapp enums Gender 并在我的Person实体我被定义为 性别 现在我想将枚举类型保留在我的
  • Oracle SQL 用于连续分组

    我需要从具有如下结构和数据的表格生成报告 Table Ticket 的数据如下 ID Assigned To 100 raju 101 raju 102 raju 103 anil 104 anil 105 sam 106 raju 107
  • 将 swift 变量包装在可选变量中的简写?

    Swift 允许我们使用速记符号str 打开可选的包装 但如果我们想做相反的事情呢 假设我有一个变量 var str String String 是否有任何简写符号可以将其转换为可选 即String or String 例如我想做类似的事情
  • 将 swift 变量包装在可选变量中的简写?

    Swift 允许我们使用速记符号str 打开可选的包装 但如果我们想做相反的事情呢 假设我有一个变量 var str String String 是否有任何简写符号可以将其转换为可选 即String or String 例如我想做类似的事情

随机推荐