2013-03-18 5 views
0

나는 mysql에서 관련된 GPS 응용 프로그램 인 테이블을 가지고있다. 태아의 오류를 보여주는 asp.net 응용 프로그램에서 실행할 때마다. 그래서 나는 mysql에서 실행하기로 결정했다. SP 실행을 위해 1 분 (정확히 70 초)이 걸릴 것이다. 문제를 해결할 수 있습니까?ASP.NET에서 MYSQL의 실행 시간 줄이기

상세 내용 :

표 1 server_gpsdata (는 GPS 데이터를 포함는 GPS 장치로부터 매 10 초를 잠근다.).

select * from server_gpsdata SD 
INNER JOIN mstcab MC on MC.cabid= SD.cabid 
INNER JOIN server_tblstatus TS on TS.statusid= MC.CabStatusid 
INNER JOIN carmaster CM on CM.carid= MC.carid 
INNER JOIN cabtype CT on CT.cabtypeid= CM.sizeid 
where date(SD.cur_datetime) =current_date and 
     MC.Cabid not in (select D.cabid from trncabdriver D 
         where date(D.logintime)=current_date) and 
     SD.gpsdataid in (select max(SGD.gpsdataid) from server_gpsdata SGD 
         where date(SGD.cur_datetime)=current_date 
         group by SGD.cabid); 
+1

아마도 쿼리와 관련 테이블을 볼 필요가 있습니다. –

+1

관련 코드 및 설치 세부 정보와 같은 더 많은 정보를 제공해 주시겠습니까? – staaar

+1

쿼리 시간 초과를 연장하는 것이 좋지만 데이터 액세스 구성 요소에 대한 자세한 내용을 제공해야합니다. –

답변

1

다음은 성능에 상당한 개선을 보여 주어야한다 :

select SD.*, MC.*, TS.*, CM.*, CT.* from 
(select max(SGD.gpsdataid) maxgpsdataid from server_gpsdata SGD 
where date(SGD.cur_datetime)=current_date 
group by SGD.cabid) SDM 
INNER JOIN server_gpsdata SD ON SDM.maxgpsdataid = SD.gpsdataid 
INNER JOIN mstcab MC on MC.cabid= SD.cabid 
INNER JOIN server_tblstatus TS on TS.statusid= MC.CabStatusid 
INNER JOIN carmaster CM on CM.carid= MC.carid 
INNER JOIN cabtype CT on CT.cabtypeid= CM.sizeid 
LEFT JOIN trncabdriver D ON MC.Cabid= D.Cabid AND date(D.logintime)=current_date 
where D.Cabid IS NULL 

기존 및 제안 된 쿼리 모두 server_gpsdata, mstcab, server_tblstatus, carmaster 및 cabtype 테이블에서 모든 열을 반환하는 것을 주 - 쿼리는 실제로 필요한 열만 쿼리에서 선택하면 성능이 향상 될 수 있습니다.

+0

위의 내용에 동의하지만 SD.cur_datetime에 대한 확인이 필요합니다. – Kickstart

+0

@Kickstart : SDM/SGD.cur_datetime 검사는 SD에서 조건을 제거하는 동안 gpsdataid를 통해 SD 레코드에 액세스해야 함을 확실히 보장합니다. (인덱스가 있어야 함). –

+0

@ Mark Bannister - 음. 혹시. gpsdataid 및 해당 테이블의 고유 한 키인지 여부에 따라 다릅니다. 그렇지 않을 수도 있습니다. 예를 들어 다른 날짜와 중복 될 수 있으므로 subselect에서 server_gpsdata로 결합을 엉망으로 만들 수 있습니다. 그러나 이것은 불행히도 지정되지 않은 테이블 디자인에 전적으로 의존합니다. 이 경우 subselect에서 날짜를 리턴하고 조인의 날짜를 사용하여 해결할 수도 있습니다. – Kickstart

관련 문제