31

我需要查询一个包含大量数据的 Sybase 数据库,并且想设置一个限制,以便数据库在 10 个结果后停止查询。

关键是性能,所以如果它搜索所有结果然后返回最后 10 个结果是没有用的。

提前致谢

4

3 回答 3

54

在 Sybase 12.5 及更高版本中,您可以在 select 语句中使用顶级谓词。这是 MSSQL 已经有很长一段时间的非 ANSI 功能。

select top 10 * from people

您不能在子查询、更新或删除中使用 top,并且没有相应的 'bottom' 子句。

top 的优点是您不必担心重置它。如果您使用数据库连接池,这一点尤其重要。

于 2009-10-20T00:42:43.897 回答
23

我相信你可以先做一个SET ROWCOUNT 10,然后这个会话中的所有查询,直到进一步SET ROWCOUNT将返回不超过 10 行。正如评论指出的那样,这会影响会话中的所有后续查询(不仅仅是SELECTs!),直到关闭(通过设置为 0)或设置不同 - 这种“全局”效果使其不如LIMIT其他引擎的典型子句方便,这本质上是每个查询,但是,我认为您对此无能为力。

于 2009-10-19T05:52:51.823 回答
6

我碰巧偶然发现了这个问题,并使用 TOP 和 START AT 从 sybase doc 替换 MySQL LIMIT 找到了答案。你需要使用 ORDER BY 否则你会得到不可预知的结果。

http://dcx.sybase.com/1101/en/dbusage_en11/first-order-formatting.html

SELECT TOP 2 START AT 5 * FROM Employees ORDER BY Surname DESC;

于 2018-09-17T19:07:48.207 回答