相当于SQL Server 2008的MySQL LIMIT子句太慢了
LIMIT子句可用于约束SELECT语句返回的行数 我查找了SQL server(2008)的LIMIT子句的等效项,发现了以下内容:相当于SQL Server 2008的MySQL LIMIT子句太慢了,sql,sql-server-2008,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
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的这个请求在浏览器中显示数据)您以
asc
顺序拉出top 10
行,然后形成您拉出top 30
行但顺序相反的那10行。然后从上一个结果中获取所有行,并再次按升序对其排序。如果您的查询看起来确实如此,那么它应该是等效的:
SELECT TOP 10 Field1, Field2 FROM matable ORDER BY MyColumn asc
如果您在MyColumn上没有索引,
orderby
可能是一项耗时的操作。您还可以检查执行计划以获取有关查询的详细信息。参考@Bogdan Sahlan的评论,我在我的专栏(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的限制子句提供一个等价项
谢谢大家。您的查询正在从一个子查询返回前30名,该子查询正在提取前10名。那没有道理。您的实际查询是什么样子的?您是否尝试创建索引?您正在从整个表中进行选择。也许where子句会加快速度。@Gordon Linoff:resultset是20行,我的查询看起来像这样,只是我更改了字段1,。。。使用真实的列名。@Bogdan Sahlan:我没有,但我必须在哪一列上创建索引?您的查询只会给出前10名,但对我来说,我想分页(从1-->10、11-->21等等…),这就是为什么您的查询无法帮助我解决问题的原因。我想我必须给我的专栏编索引。那么,你能解释一下,自从你从
top10
中选择了top10
,你的查询是如何给你提供超过10行的吗?也许会帮助你达到期望的目标。