mysql执行查询性能低下

标签 mysql sql

我想优化下面的 SQL 查询,目标是在 3-4 秒内获得结果。

select(
    ((select data from t_sayac_degerler where id = (select max(id) from t_sayac_degerler where adres = '1.8.0'  and tarih between '2016.02.15 11:00' and '2016.02.16 17:13')) 
    - 
    (select data from t_sayac_degerler where id = (select min(id) from t_sayac_degerler where adres = '1.8.0' and tarih between '2016.02.15 11:00' and '2016.02.16 17:13')))
    *
    (select multiplier from t_sayac where s_id = ((select s_id from t_sayac_degerler where id = (select max(id) from t_sayac_degerler where adres = '1.8.0' and tarih between '2016.02.15 11:00' and '2016.02.16 17:13'))))
    ) 
    as value

我怎样才能实现这个目标?

最佳答案

我只是好奇这是否会提高您的性能,通过删除嵌套的 Select 语句,我将删除嵌套循环。我假设 id 值是 int:

DECLARE @MaxID int, @MinID int, @s_id int;


SELECT  @MaxID=max(id) , @MinID = min(id) 
FROM       t_sayac_degerler 
WHERE   adres = '1.8.0' and tarih between '2016.02.15 11:00' and '2016.02.16 17:13';

SELECT @s_id=s_id 
FROM   t_sayac_degerler 
WHERE  id = @MaxID


SELECT(
    (
      (SELECT data 
       FROM   t_sayac_degerler 
       WHERE  id = @MaxID) 
       - 
      (SELECT data 
       FROM   t_sayac_degerler 
       WHERE  id = @MinID)
    )
    *
    (SELECT multiplier 
    FROM   t_sayac 
    WHERE  s_id = @s_id
    )
) 
as value 

关于mysql执行查询性能低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35436432/

相关文章:

java - 多对多删除集 NULL

mysql - 确定哪些商品被一起购买(杰卡德系数)

mysql - 根据多对多表中的 Count() 更新表

mysql - 获取多连接中的行数

php - 使用 STR_TO_DATE 时的更新问题

mysql - 保持 WHERE IN 中的顺序(子查询)

php - 使用相关表中的数据查询设置值

php - 如何在 PDO 中将查询结果检索为数组?

PHP 多查询问题

mysql - 查找最近距离训练器的查询