LIMIT子句可用于约束SELECT语句返回的行数。
我为SQL server(2008)寻找了一个等效的LIMIT子句,并找到了这个:
SELECT *
FROM (SELECT TOP 30 field1,
field2
FROM (SELECT TOP 10 field1,
field2
FROM matable
ORDER BY mycolumn ASC) AS tbl1
ORDER BY mycolumn DESC) AS tbl2
ORDER BY mycolumn ASC
显示10行
中的30行工作正常!!但是当我从我想要提取数据的地方增加数量时,需要花费很多时间。有人对如何改进SQL Server 2008的查询有任何想法吗? (我的表包含很多行,我在PHP和Jquery中使用此请求在浏览器中显示数据)
答案 0 :(得分:0)
您使用top 10
订单提取asc
行,然后形成您提取top 30
行的10行,但顺序相反。然后从先前的结果中获取所有行,并再次按升序对其进行排序。如果你的查询真的看起来应该是等价的:
SELECT TOP 10 Field1, Field2 FROM matable ORDER BY MyColumn asc
如果MyColumn上没有索引,则 ORDER BY
可能会非常耗时。您还可以检查执行计划以获取有关查询的详细信息。
答案 1 :(得分:0)
参考@Bogdan Sahlean的评论,我在我的专栏(MyColumn)上创建了一个新索引,现在它真的非常快。并且查询仍然存在:
SELECT * FROM (
SELECT TOP 30 Field1, Field2 FROM (
SELECT TOP 10 Field1, Field2
FROM matable
ORDER BY MyColumn asc
) AS tbl1 ORDER BY MyColumn desc
) AS tbl2 ORDER BY MyColumn asc
总结;如果你想要 SQL Server 2008的等于 LIMIT ,
谢谢大家。