我有一张50-100k行的表。我有一个自动增量ID字段,另一个字段叫做Main_Port。
我想选择Main_Port = x的最后一个ID。我希望它有效率。
我现在正在使用的是:
SELECT max(MANIFEST_ID)FROM MANIFEST_MSS.dbo.Manifest where Main_Port = x
这是最好的方法吗?
该表有可能增长到500k +行
答案 0 :(得分:3)
在不了解您的数据结构和索引结构的情况下,很难说“这将是有效的。您使用的查询:
SELECT max(MANIFEST_ID)
FROM MANIFEST_MSS.dbo.Manifest
WHERE Main_Port = x
可能非常有效,取决于....
要添加一些透视图,在数据库术语中,500k行并不是那么大。你已经在这里看到了一些关于查询的变化,一个可能比另一个略快,但真正的速度将归结为具有良好的索引(Main_Port,ManifestID desc)。 Alternatley,如果你真的想深入挖掘,你会想要实现一个摘要视图。这是物化视图的decent explanation机制。
答案 1 :(得分:2)
SELECT MANIFEST_ID FROM MANIFEST_MSS.dbo.Manifest where Main_Port = x ORDER BY MANIFEST_ID DESC LIMIT 1
似乎是另一种方式,但我不知道它是否会比你的更有效
答案 2 :(得分:2)
如果你愿意,你可以使用Order By来做,虽然使用MAX很好。
SELECT MANIFEST_ID FROM MANIFEST_MSS.dbo.Manifest where Main_Port = x ORDER BY MANIFEST_ID DESC LIMIT 1
答案 3 :(得分:2)
MAX不会给你最后一个,它会给你更大的价值。这很糟糕,因为它必须扫描所有行以获得更大的值。
我会这样做:
SELECT *
FROM MANIFEST_MSS.dbo.Manifest
where Main_Port = x limit 1
order by ID desc
答案 4 :(得分:1)
您的清单ID列是自动增量列,那么您也可以在下面查询:
SELECT TOP 1 MANIFEST_ID FROM MANIFEST_MSS.dbo.Manifest WHERE Main_Port = X order by MANIFEST_ID DESC