所以我有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 = ?
答案 0 :(得分:3)
JOIN
几乎总是比子查询更快,因为它导致单个查询,而子查询是两个查询。但是,有些数据库知道如何将这些简单的子查询优化为JOIN
,尽管我怀疑SQLite会这样做。
尽管如此,有时候,考虑到一个数据的结构, 可以更快地执行子查询。找到答案的唯一真正方法是使用可能的野外样本数据集加载您的数据库并对这两种方法进行基准测试。
但是,我怀疑它会是一种清洗。大多数iPhone应用程序在数据库中没有足够的行来产生很大的不同。