我有一个查询返回10000个用作地图上绘图点的记录。为了减少负载并提高应用程序速度,我们尝试实现基本相当于Level of Detail逻辑的内容。基本上,当缩小时,显示50%的点。放大时,显示100%的点数。
这最终是我需要最终SQL的样子:
SELECT *
FROM
(SELECT
[t0].[RecordName],
[t0].[LastMaintenanceDate]
,Row_Number() OVER (ORDER BY [t0].Ticker) as RowNumber
FROM
[dbo].[TableName] AS [t0]
)as [t1]
WHERE RowNumber % 2 = 0
在LINQ中,我可以使用.Skip和.Take来获取Row_Number()Over部分(example here),但是在执行此操作时,Where条件生成使用'between'而不是“where RowNumber%2 = 0“我需要。
我接近这个吗?为了获得我们在这里寻求的全部性能提升,这种排除确实需要在SQL服务器上进行。
答案 0 :(得分:2)
你的桌子上有哪些栏目?例如,如果您有一个int identity主键列,则可以使用该...
from mt in dc.MyTable
where mt.ID %2 == 0
select mt
...或...
where mt.SomeDataTime.Millisecond % 2 == 0
...说, 你想减少负荷吗?
您帖子中的T-SQL以及我提到的两个解决方案都会强制执行全表扫描,因此如果您的表格很大,那么您可以根据索引的内容减少记录(以及其中where子句谓词实际上可以使用索引)...
答案 1 :(得分:0)