0

私はmysqlに関連するGPSアプリケーションであるテーブルを持っています。asp.netアプリケーションから実行しているときはいつでも、胎児のエラーが表示されます。SPの実行には1分以上(正確には70秒)かかります。問題を整理することは可能ですか。

さらに詳しい情報:

表 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);
4

1 に答える 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 テーブルからすべての列を返すことに注意してください。実際に必要な列のみがクエリで選択されている場合、クエリのパフォーマンスが向上する可能性があります。

于 2013-03-18T13:25:33.943 に答える