Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql查询需要60多秒才能执行。如何提高绩效_Mysql - Fatal编程技术网

MySql查询需要60多秒才能执行。如何提高绩效

MySql查询需要60多秒才能执行。如何提高绩效,mysql,Mysql,我编写了一个查询来选择所有行,其中前一行中“gvA”列的值为0,而当前行中的值为非零。但我的问题是这个查询执行起来太长了。 我的表有40000行,查询大约需要60-65秒,这对于查询来说太多了。如何改进查询以获得更好的性能 SELECT device_no,datetime FROM ( SELECT gvA, (SELECT e2.gvA FROM tyn_records e2 WHERE e2.tyn_id < e1.tyn_id O

我编写了一个查询来选择所有行,其中前一行中“gvA”列的值为0,而当前行中的值为非零。但我的问题是这个查询执行起来太长了。 我的表有40000行,查询大约需要60-65秒,这对于查询来说太多了。如何改进查询以获得更好的性能

SELECT device_no,datetime 
FROM (
  SELECT
    gvA,
    (SELECT e2.gvA
     FROM tyn_records e2
     WHERE e2.tyn_id < e1.tyn_id
     ORDER BY tyn_id DESC LIMIT 1) as previous_value,
    datetime,
    device_no
  FROM tyn_records e1
  WHERE gvA > 0 AND DATE(datetime) = CURDATE() - INTERVAL 2 DAY
) selected
WHERE selected.previous_value = 0
下面是我的桌子 设备:

天佑唱片公司:

我会做两件事:

我将稍微重新表述一下查询,特别是删除过滤条件左侧的DATE函数

select
  device_no,
  datetime 
from (
  select
    gva, 
    lag(gva) over(order by tyn_id) as previous_value,
    datetime,
    device_no
  from tyn_records
  where gva > 0 
    and datetime between curdate() - interval 2 day
                     and curdate() - interval 1 day
) x
where previous_value = 0
删除谓词左侧的函数后,可以创建适合优化查询的索引:

create index ix1 on tyn_records (datetime, gva);

作为旁注,您计算上一个_值的方式可能不是确定性的,并且每次运行查询时可能会产生不同的结果。如果列tyn_id不唯一,则可能发生这种情况。

请包括解释结果,并在tyn_记录表中列出所有索引。您的所有日期字段是否仅为日期而非日期/时间?换句话说,您的列是否也包含实际时间组件。您还引用了最外层结果中的设备,但内部没有设备上下文-除非gvA是您正在引用的设备。我添加了表的图像,希望您从M1064获得所需信息-您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在第行使用“order by tyn_id as‘previous_value’、datetime、device_no from tyn”7@ZeeshanCh如果您遇到这个错误,那么可能您的MySQL版本比8.x旧。如果是这种情况,那么用答案中的子查询替换由tyn_id组成的laggva overorder部分。