2013-04-19 3 views
2

몇 가지 계산을 수행하는 데 사용하는 데이터 테이블이 있습니다. 내가 계산 결과를 분류하는 데 사용되는 범위의 집합을 포함 다른 테이블이 다른 손으로MySQL : 점수 계산을위한 쿼리 최적화

+------------+-----------+------+----------+ 
| id_process | id_region | type | result | 
+------------+-----------+------+----------+ 
|   1 |   4 | 1 | 65.2174 | 
|   1 |   5 | 1 | 78.7419 | 
|   1 |   6 | 1 | 95.2308 | 
|   1 |   4 | 1 | 25.0000 | 
|   1 |   7 | 1 | 100.0000 | 
+------------+-----------+------+----------+ 

: 같은 계산 후 결과 데이터 세트 보인다. 범위 테이블은 다음과 같습니다.

계산할 때 각 값에 해당 '상태'열을 추가하는 쿼리를 수행해야합니다. 현재 계산 쿼리에 다음 필드를 추가하면됩니다.

select 
    ..., 
    ..., 
    [math formula] as result, 
(select status 
    from ranges r 
    where result between r.start and r.end) status 
from ... 
where ... 

괜찮습니다. 그러나 많은 행 (200K 이상)이있을 때 계산 쿼리가 느려집니다.

제 질문은 : 하위 쿼리없이 '상태'값을 찾는 방법이 있습니까?

이전에 비슷한 작업을 한 사람이 있습니까?

감사

답변

2

예, 하위 쿼리를 찾고 가입되어

select s.*, r.status 
from (select s.* 
     from <your query here> 
    ) s left outer join 
    ranges r 
    on s.result between r.start and r.end 

명시 join의 자주 중첩 select보다 더 최적화 할 수 있습니다. 이 경우에는 ranges 테이블이 꽤 작아 보입니다. 따라서 성능 문제가되지 않을 수 있습니다.