MySQL LIMIT子句相当于SQL Server 2008的速度

时间:2013-12-27 15:03:27

标签: sql sql-server-2008

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中使用此请求在浏览器中显示数据)

2 个答案:

答案 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

  1. 使用以上查询
  2. 在列上创建一个索引,其中包含您要订购的人(在我的情况下是:MyColumn)
  3. 谢谢大家。