使用 Parallel LINQ 进行数据分页

a)   第一种【耗时11~18s】,这种查询方式并不是很优化,但是目前也没有想到更好的方式,除了创建一张中间表,是不是可以使用【全文索引】?

SELECT * FROM

(

  SELECT
 ROW_NUMBER() OVER(ORDER BY IsPutAway) AS Num, * FROM

  (

    SELECT * FROM Goods_1 WHERE Name Like ‘%测试%‘ UNION ALL

    SELECT * FROM Goods_2 WHERE Name Like ‘%测试%‘ UNION ALL

    SELECT * FROM Goods_3 WHERE Name Like ‘%测试%‘ UNION ALL

    SELECT * FROM Goods_4 WHERE Name Like ‘%测试%‘ UNION ALL

    SELECT * FROM Goods_5 WHERE Name Like ‘%测试%‘ UNION ALL

    SELECT * FROM Goods_6 WHERE Name Like ‘%测试%‘ UNION ALL

    SELECT * FROM Goods_7 WHERE Name Like ‘%测试%‘ UNION ALL

    SELECT * FROM Goods_8 WHERE Name Like ‘%测试%‘

  ) AS T

) AS T

WHERE Num BETWEEN ((2 - 1) * 10 + 1) AND 2 * 10;

b)   第二种【耗时3~7s】,这种方式采用Linq 并行多多线程的方式,查询数据库,再使用程序进行排序并分组。这是我想到的一种解决方式,效果还算理想!

List<VGoodsModel> dataList = new List<VGoodsModel>();
using (var content = CreateContext())
{
    List<int> tableIndexList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
    StringBuilder sbSqlAll = new StringBuilder();
    sbSqlAll.AppendLine();
    tableIndexList.AsParallel().ForAll(o =>
        {
            StringBuilder sbSql = new StringBuilder();
            sbSql.AppendFormat("SELECT * FROM Goods_{0} with(nolock) WHERE", o);
            if (Para.GoodsId <= 0)
                sbSql.AppendFormat(" Type={0}", GoodsClassify.TYPE);
            else
                sbSql.AppendFormat(" Id={0} AND Type={1}", Para.GoodsId, GoodsClassify.TYPE);
            if (!string.IsNullOrWhiteSpace(Para.GoodsName))
                sbSql.AppendFormat(" AND Name LIKE ‘%{0}%‘", Para.GoodsName);
            var list = content.ExcuteList<VGoodsModel>(sbSql.ToString(), CommandType.Text, null);
            dataList.AddRange(list);
            sbSqlAll.AppendLine(string.Format("{0}, 执行SQL:{1}", o, sbSql.ToString()));
        });
    Weimob.Log.FloderLogger.CreateInstance("GetGoodsPagingByGoodsName").SingleLineDebug(sbSqlAll.ToString());
}
时间: 2024-10-05 09:30:10

使用 Parallel LINQ 进行数据分页的相关文章

asp.net LINQ实现数据分页

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration; public partial class _Default : System.Web.UI.Page { LinqDBDataContext lqDB = new L

linq 大数据 sql 查询及分页优化

前提: 需要nuget   PredicateLib   0.0.5: SqlServer  2008R2 (建议安装 64 位): .net 4.5 或以上: 当前电脑配置: I7 4核  3.6GHZ,8G 内存 (办公电脑 ,win10 64位) 描述: 在实际项目中我们会遇到多个表关联查询数据,并进行分页操作:当数据量很大的时候如(500万或以上)的时候,分页很吃力,特别还需要一些模糊查询,排序的时候会导致很慢: 本文章主要解决分页及多个数据表关系查询速度慢的问题: 解决办法及优化过程:

.Net多线程编程—Parallel LINQ、线程池

Parallel LINQ 1 System.Linq.ParallelEnumerable 重要方法概览: 1)public static ParallelQuery<TSource> AsParallel<TSource>(this IEnumerable<TSource> source);启用查询的并行化 2)public static ParallelQuery<TSource> AsOrdered<TSource>(this Paral

DataTable数据分页

using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks; namespace 数据分页{ public class Student { public int? StuNo { get; set; } public string Name { get;

详解ASP.NET MVC数据分页

ASP.NET MVC框架已经进入2.0时代,本文将从ASP.NET MVC数据分页谈起,希望能对大家有所帮助. 在网页上进行表格资料或其他显示资料的分页是一种十分常见的需求,以前我们有 GridView 或 DataPager 可以帮我们自动分页,虽然到了 ASP.NET MVC 一切全部重头来过,但我们也不用真的那麽辛苦的自己实做分页,因为早就有人帮我们写好程式并开放原始码分享给这个世界了. 如果你已经体会到在 ASP.NET MVC 中妥善利用强型别(Strong Typed)特性进行开发

C#--Web数据分页

实现数据表内的数据分页操作: 网页源数据: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Car fenye.aspx.cs" Inherits="Car__fenye" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"><he

ThinkPHP数据分页Page.class.php

获取分页类 ThinkPHP提供了数据分页的扩展类库Page,可以在http://www.thinkphp.cn/extend/241.html下载,或者下载官方的完整扩展包(http://www.thinkphp.cn/down/253.html)里面也已经包含分页扩展类了.把解压后的Page.class.php放入ThinkPHP/Extend/Library/ORG/Util/(如果没有请手动创建)目录下面. 当然,扩展类库的位置其实比较随意,你也可以放入项目的类库目录下面,区别只是在于你

【知了堂学习笔记】JSP页面数据分页实现(一)——分页概念以及主流数据库的分页查询

一.分页简介 1.分页,就是一种将数据库里的数据一部分展示给用户的技术.为什么要这样做呢?因为一般来说用户在查询时数据是非常多的,当一个页面不能显示所有数据时,我们就要对查询的数据进行分页,就像我们的书本分成一页一页一样.最简单的例子就是百度,当你百度时,成千上万的数据,并不是呈现在一个页面的. 2.分页的实现方式 1)假分页(不推荐):什么是假分页呢?假分页就是一次性将数据库里的数据全部取出来,存储在页面中,然后再将数据分别展示出来.这种假分页在数据少的还可以玩玩,当数据多起来的时候,这种方式

salesforce 零基础开发入门学习(八)数据分页简单制作

本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能. 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的类用于VF的控制. 主要的类包括但不限于以下: ApexPages.StandardController:当为一个标准Controller定义扩展的时候使用此类.StandardController对象为Salesforce提供的预构建VF的控制器对象引用; ApexPages.Action:使用Action类和方法用于VF自定义控制器和