我正在尝试编写一个有效的查询来删除数据块。为此,我希望通过使用主键来获取最旧的记录来避免索引扫描。但是,我看到返回了一些意想不到的结果。
我希望这个
SELECT TOP 15 OrderID FROM [Order]
会给我最旧的 15 条记录,因为我可以依赖主键递增,因此表中的存储顺序从低到高。
但是,这会返回不同的结果集
SELECT TOP 15 OrderID FROM [Order] ORDER BY DateCreated ASC
这似乎是一种更准确但更昂贵的方式来获得我需要的结果。
令人困惑的是,这
SELECT TOP 15 * FROM [Order]
为此提供一组不同的 OrderID (PK)
SELECT TOP 15 OrderID FROM [Order]
我了解http://msdn.microsoft.com/en-gb/library/ms189463.aspx解释说,如果没有 ORDER BY 子句,则无法保证订单,但希望 PK 为我订购,无法解释两者之间的差异最后两个选择子句。