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