我需要查询一个Sybase数据库,其中包含大量数据,并希望设置限制,以便在返回10个结果后停止查询。
关键是性能,如果搜索所有结果然后返回最后10个结果将毫无用处。
提前感谢。
在Sybase 12.5及更高版本中,您可以在选择语句中使用top谓词。这是一个非ANSI功能,而MSSQL已经有了相当长的时间。
select top 10 * from people
在子查询、更新或删除中无法使用 top,也没有相应的“bottom”子句。
使用 top 的好处是您不必担心重置它。如果您正在使用数据库连接池,则这一点尤为重要。
UPDATE TOP 10 FROM people...
DELETE TOP 10 people
请参阅http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.doc.ase_docs_12.5.3.newfeatures1253_rev/html/newfeatures1253_rev/newfeatures1253_rev11.htm - Mike Shauneu我认为你可以先使用 SET ROWCOUNT 10
命令,然后在这个会话中的所有查询直到进一步使用 SET ROWCOUNT
命令时,都只返回不超过10行。正如一条评论指出的那样,这会影响该会话中所有后续查询(不仅仅是SELECT
语句!),直到将其关闭(通过设置为0)或以不同方式设置 -- 这种“全局”效果使它比其他引擎典型的LIMIT
子句不太方便,后者本质上是每个查询的限制,但我认为你对此无能为力。
我偶然遇到了这个问题,并在 sybase 文档中找到了使用 TOP 和 START AT 替换 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;