2

だから私は3つのテーブルを得ました:

Locations (LocationID [PK])

Track_Locations (TrackID [FK], LocationID [FK])

Tracks (TrackID [PK])

私は iPhone 用のアプリを作成していJOINますが、サブクエリよりもおそらく高速に動作すると言われました。これは本当ですか?私は周りを検索しましたが、これに対する直接的な答えを見つけることができず、この場合に何を使用するのが最適かを知りたいです.

どちらの場合も、クエリは次のようになります。

サブクエリ:

SELECT LocationID, TimestampGPS, Longitude, Latitude, ... 
FROM locations 
WHERE LocationID 
IN (SELECT LocationID FROM track_locations WHERE TrackID = ?)

使用JOIN:

SELECT l.LocationID, l.TimestampGPS, l.Longitude, l.Latitude, ... 
FROM locations l
JOIN track_locations tl
ON (l.LocationID = tl.LocationID)
JOIN tracks t
ON (t.TrackID = tl.TrackID)
WHERE t.TrackID = ?
4

1 に答える 1

3

サブクエリは 2 つのクエリであるのに対し、 AJOINは結果が 1 つのクエリになるため、ほとんどの場合、サブクエリよりも高速です。ただし、一部のデータベースは、そのような単純なサブクエリをJOINs に最適化する方法を知っていますが、SQLite が知っているとは思えません。

とはいえ、データの構造によっては、サブクエリを実行する方が高速な場合もあります。それを見つけるための唯一の実際の方法は、データベースに野生からのサンプル データの可能性のあるコレクションをロードし、両方のアプローチをベンチマークすることです。

しかし、それはウォッシュになるのではないかと疑っています。ほとんどの iPhone アプリでは、データベースに十分な行がなく、大きな違いがありません。

于 2012-05-31T07:35:44.100 に答える