gpt4 book ai didi

Mysql存储过程太慢

转载 作者:行者123 更新时间:2023-11-30 01:34:39 34 4
gpt4 key购买 nike

我在sql中编写了一个存储过程,速度非常慢。数据库中有百万条记录。

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `FetchEnergyLine`(IN From_Time INT, IN
To_Time INT, IN Meter_Id INT, IN Device_Id VARCHAR(10), IN ct INT)
BEGIN
DECLARE c INT(5) default 0;
DECLARE Count INT default 1;

SET autocommit=0;
SET @c=0;
SET Count = (SELECT COUNT(TimeStamp) FROM Meter_Data
WHERE
TimeStamp > From_Time
AND TimeStamp < To_Time
AND MeterID = Meter_Id
AND DeviceID = Device_Id );

IF Count > (2*ct) THEN SET Count=Count/ct;
ELSE SET COUNT = 20;
END IF;

SELECT * FROM ( SELECT TimeStamp, FwdHr, W , @c:=@c+1 as counter
FROM
Meter_Data
WHERE
TimeStamp > From_Time
AND TimeStamp < To_Time
AND MeterID = Meter_Id
AND DeviceID = Device_Id ORDER BY TimeStamp
) as tmp
WHERE
counter % Count =1;
END

我认为当我的数据较少时,速度非常快,但我使用同一数据库的其他查询运行良好,但存储过程很慢。1)它可以是计数语句,它在开始时计算读数的数量,但我不太确定。

有人可以帮忙吗?提前致谢..

最佳答案

构建查询后我要做的第一件事是确保我没有忘记任何内容。 (索引、临时表、键等...)

乍一看,我猜您的计划中有一些表扫描,这可能会占用 80-90% 的处理时间。
为了确保不会发生这种情况,请创建所需的 indexes在您查询的表中。

为了确保没有任何事情花费太长时间,您应该学习如何使用execution plan看看什么花费的时间最长。

关于Mysql存储过程太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17067452/

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