2017-02-18 1 views
3

나는 간단한 쿼리가 있습니다. 내부 선택 쿼리를 제거하고 쿼리의 결과로 바꾸면 0.1 초가 걸립니다. 내부 쿼리 만 실행하면 0.1 초가 걸립니다. 센서에 조인을 제거하면 0.5 초 안에 실행됩니다 (괜찮을 것입니다.) 조언이 있습니까? 나는 INT 인 The Id 컬럼에 인덱스를 가지고 있습니다.느린 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

을... 반환 된 행 수를 줄이기 위해 내부 쿼리에 where 절을 추가 했으므로 빠른 결과입니다. 감사합니다. – 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