相关疑难解决方法(0)

SQL Server中的行偏移量

SQL Server中是否有任何方法可以从给定的偏移量开始获取结果?例如,在另一种类型的SQL数据库中,可以执行以下操作:

SELECT * FROM MyTable OFFSET 50 LIMIT 25
Run Code Online (Sandbox Code Playgroud)

得到结果51-75.此构造似乎不存在于SQL Server中.

如何在不加载我不关心的所有行的情况下完成此操作?谢谢!

sql sql-server

127
推荐指数
7
解决办法
21万
查看次数

使用LINQ to SQL读取庞大的表:耗尽内存与慢速分页

我有一个庞大的表,我需要阅读某个订单并计算一些汇总统计数据.该表已经有一个正确顺序的聚集索引,因此获取记录本身非常快.我正在尝试使用LINQ to SQL来简化我需要编写的代码.问题是我不想将所有对象加载到内存中,因为DataContext似乎可以保留它们 - 但是尝试对它们进行分页会导致可怕的性能问题.

这是故障.最初的尝试是这样的:

var logs = 
    (from record in dataContext.someTable 
     where [index is appropriate]
     select record);

foreach( linqEntity l in logs )
{
    // Do stuff with data from l
}
Run Code Online (Sandbox Code Playgroud)

这是非常快的,并且流速很好,但问题是应用程序的内存使用量不断上升.我的猜测是LINQ to SQL实体被保留在内存中而没有正确处理.因此,在创建了很多对象C#时读取内存不足后,我尝试了以下方法.这似乎是许多人使用的常见Skip/ Take范例,具有节省内存的附加功能.

请注意,这_conn是预先创建的,并且为每个查询创建临时数据上下文,从而导致关联的实体被垃圾回收.

int skipAmount = 0;
bool finished = false;

while (!finished)
{
    // Trick to allow for automatic garbage collection while iterating through the DB
    using (var tempDataContext = new MyDataContext(_conn) {CommandTimeout = …
Run Code Online (Sandbox Code Playgroud)

c# sql linq database skip-take

5
推荐指数
1
解决办法
6416
查看次数

标签 统计

sql ×2

c# ×1

database ×1

linq ×1

skip-take ×1

sql-server ×1