3

私はフィラデルフィアのトランジット データをいじっており、gtfs データを格納する sqlite データベースを持っています。特定の停留所での出発時間を検索する次のクエリがあります。

SELECT "stop_time".departure_time FROM "stop_time"
 INNER JOIN "trip" ON "trip".trip_id = "stop_time".trip_id 

 WHERE 

 (trip.route_id = '10726' ) 
 -- AND (trip.service_id = '1') 
 AND (stop_time.stop_id = '220') 
 AND (time( stop_time.departure_time ) > time('08:30:45')) 
 AND (time( stop_time.departure_time ) < time('09:30:45'));

service_id を 1 に一致させる句は、現在コメント アウトされています。service_id を一致させずに、このままクエリを実行すると、2 秒かかります。service_id 句のコメントを外すと、30 かかります。route_id のトリップ テーブルを既に調べているので、その理由はわかりません。

何かご意見は?

4

2 に答える 2

0

その理由はservice_id、別のインデックスに優先して選択されているインデックスがあり、の異なる値があま​​りないためservice_id、 の行が非常に多いため、インデックスの使用はあまり役に立ちませんservice_id = '1'

于 2012-09-09T13:36:09.567 に答える
0

これは一般に、service_id にフィルターがない場合に使用される (route_id、stop_id、department_time) にインデックスが定義されている場合に発生します。それを句に含めるとWHERE、インデックスに存在しないTABLE SCANため、実行時間の短縮が必要になります。service_idインデックス定義にも含める場合、 thenTABLE SCANは に置き換えられINDEX SCANます。

于 2012-09-09T13:20:08.517 に答える