2017-02-18 1 views
3

は、私は単純なクエリを持っています。内側のselectクエリを削除し、それをクエリの結果と置き換えると、0.1秒かかります。内側のクエリを単独で実行すると、0.1秒かかります。 SensorへのJoinを削除すると、0.5秒で実行されます(これは問題ありません)。私はINTのThe Id列にIndexesを持っています。スローmysqlのクエリ

答えて

1

ChipIdSensorsテーブルが結合条件で使用され、内部選択クエリのRockIdgroup byの列名です。この列のインデックスを作成しようとしましたか?また

このクエリしてみてください:ジョインとして

SELECT Description, Temp1, Temp2, myData.DateAndTime 
FROM 
    (SELECT *,max(id) as mymax FROM SensorData 
     Group by RockId 
     Order by id desc 
    ) as myData 
INNER Join Sensors on Sensors.ChipId= myData.RockID 
WHERE SensorData.Id = mydata.mymax 
ORDER BY DhtTemp; 
+0

私はそれが好きです。ありがとう! – Jay

1

ほとんどwhere in (select ...)問合せは(オプティマイザによって、多くの場合、自動的に、常にではない)に書き換えることができるが、これを試してみてください。英語で

select Description, Temp1, Temp2, a.DateAndTime 
from SensorData a 
left join SensorData b on b.RockId = a.RockId 
    and b.ID > a.ID 
join Sensors on Sensors.ChipId = a.RockID 
where b.ID is null 
order by DhtTemp 

、これは「高いだけID`を持っていないSensorDataの行を返す意味

あなたはRockIdのインデックスであることを確認してください

+0

はい、有効なクエリですが、ほとんど速くはありません。 – Strawberry