2

所以我有3张桌子:

Locations (LocationID [PK])

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

Tracks (TrackID [PK])

我正在为 iPhone 构建一个应用程序,有人告诉我 aJOIN可能会比子查询运行得更快。这是真的?我已经四处搜索,但找不到直接的答案,并且想知道在这种情况下最好使用什么。

我在这两种情况下的查询将如下所示:

子查询:

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

AJOIN几乎总是比子查询快,因为它产生一个查询,而子查询是两个查询。然而,一些数据库知道如何将这些简单的子查询优化为JOINs,尽管我怀疑 SQLite 不会。

也就是说,有时,考虑到数据的结构,执行子查询更快。找出答案的唯一真正方法是使用可能来自野外的样本数据集合加载您的数据库,并对这两种方法进行基准测试。

然而,我怀疑这将是一次洗涤。大多数 iPhone 应用程序在数据库中没有足够的行来产生很大的不同。

于 2012-05-31T07:35:44.100 回答