我有一张包含2000多辆汽车经度和纬度的桌子。每分钟都会将每辆车的位置添加到表中,现在它有超过200M的记录。在我的申请中,我想获得每辆车的最后位置。我使用以下查询:
SELECT TOP 1 *
FROM position
WHERE car_id = 20
ORDER BY id DESC
但是这个查询需要很长时间(大约5分钟)。有没有更好的方法来查询每辆车的最后位置?
答案 0 :(得分:0)
假设表position
有主键,您可以从表格中选择MAX([pk])
,与每个car_id
相关联。见下面的例子:
CREATE TABLE #Test
(
ID INT PRIMARY KEY
,car_id INT
,description VARCHAR(20)
)
INSERT #Test
VALUES
(1, 20, 'Chevy'),
(2, 20, 'Chevy'),
(3, 30, 'Ford'),
(4, 30, 'Ford'),
(5, 30, 'Ford'),
(6, 40, 'Audi'),
(7, 40, 'Audi'),
(8, 40, 'Audi')
SELECT
T.*
FROM #Test T
WHERE T.ID = (SELECT MAX(ID) FROM #Test WHERE car_id = T.car_id)
结果如下:
| ID | car_id | description |
| 8 | 40 | Audi |
| 5 | 30 | Ford |
| 2 | 20 | Chevy |
显然,description
需要替换为longitude
和latitude
以满足您的需求,但这种方法应该可行。在大多数情况下,使用ORDER BY
可以显着降低查询速度,因此您可以随时避免使用此问题。