选择SQL Server中巨大表中的最后一条记录

时间:2016-03-11 14:17:41

标签: sql-server

我有一张包含2000多辆汽车经度和纬度的桌子。每分钟都会将每辆车的位置添加到表中,现在它有超过200M的记录。在我的申请中,我想获得每辆车的最后位置。我使用以下查询:

SELECT TOP 1 * 
FROM position 
WHERE car_id = 20 
ORDER BY id DESC

但是这个查询需要很长时间(大约5分钟)。有没有更好的方法来查询每辆车的最后位置?

1 个答案:

答案 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需要替换为longitudelatitude以满足您的需求,但这种方法应该可行。在大多数情况下,使用ORDER BY可以显着降低查询速度,因此您可以随时避免使用此问题。