百万条数据,如何提高查询、比较以及更新处理的速度

时间:2021-08-06 21:48:09

public int[] counts()
{
        int[] zj;
        int y1= 0;
        int y2= 0;
        int y3= 0;
        int y4= 0; 
    IList<tb_ssq> listSsq = (from ls in cpjc.tb_ssq where ls.tb_ssq_QiShu == 2011129 orderby ls.tb_ssq_JieZhiTime descending select ls).ToList();
if (listSsq.Count != 0)
        {
            ArrayList al = new ArrayList { 1, 2, 3, 4, 5, 6};
            ArrayList alBlue = new ArrayList { 7};
            for (int i = 0; i < listSsq.Count; i++)
            {
                int countH = 0;    //统计红球中奖个数
                int countL = 0;    //统计篮球是否中奖
                if (al.Contains(listSsq[i].tb_ssq_h1))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h2))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h3))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h4))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h5))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h6))
                    countH++;
                if (alBlue.Contains(listSsq[i].tb_ssq_l1))
                    countL++;
                if (countH == 6 && countL == 1)
                {
                    y1++;
                    listSsq[i].tb_ssq_state= 2; 
                }
                else if (countH == 6 && countL == 0)
                {
                    y2++;
                    listSsq[i].tb_ssq_state = 2;
                }
                else if (countH == 5 && countL == 1)
                {
                    y3++;
                    listSsq[i].tb_ssq_state = 2;
                }
                else if ((countH == 5 && countL == 0) || (countH == 4 && countL == 1))
                {
                    y4++;
                    listSsq[i].tb_ssq_state = 2;
                }
                else if ((countH == 4 && countL == 0) || (countH == 3 && countL == 1))
                {
                    listSsq[i].tb_ssq_state = 2;
                }
                else if (countL == 1)
                {
                    listSsq[i].tb_ssq_state = 2;
                }
                else
                {
                    listSsq[i].tb_ssq_state = 1;
                } 
            }
            cpjc.SubmitChanges();
        }
        zj = new int[] { y1, y2,y3, y4};
        return zj;

}


如上所示代码,tb_ssq表中有100条数据,如何提高该自定义方法counts()的执行处理速度,即查询数据、比较数据、更新数据的速度???

17 个解决方案

#1


先将需要的数据取出来放在内存里面,注意只取需要用到的数据,然后在内存里比较

#2


这个需要很多方面去优化,服务器,数据库,sql语句,客户端(分页,按提条件查询)等等,慢慢来吧

#3


最基本的一个方法,先给主键和查询列添加索引

#4


引用 2 楼 bdmh 的回复:
这个需要很多方面去优化,服务器,数据库,sql语句,客户端(分页,按提条件查询)等等,慢慢来吧

++

#5


引用 4 楼 kk297173176kk 的回复:
引用 2 楼 bdmh 的回复:

这个需要很多方面去优化,服务器,数据库,sql语句,客户端(分页,按提条件查询)等等,慢慢来吧

++

差点看成是“ ”了。哈哈。

#6


添加索引 和 用多少取多少的原则

#7


在你的硬件条件目前无法改变的情况下,一般只能是从sql语句入手了,想法优化,用多少取多少(也有多种方法),前台分页是必须的,
还有楼上说的,索引了什么的.真得慢慢来,就是一下子把这些都用上了,也不一定就能好多少,把这些和你的实际情况结合起来一下.

#8


嗯,先分析sql语句,需要什么就只取什么,别太浪费!

#9


http://www.cnblogs.com/jirigala/archive/2010/11/03/1868011.html这是吉日嘎拉的数据库优化,很多人借鉴过。楼主看看。

#10


增加索引,数据库语句优化点,用sql探测工具,检查下CUP,月底,说明语句优化越好

#11


如果有主键, 主键是数字, 可以用top+not in, 否则用row_number()好点.

#12


错了,表中有100w条数据,如何提高比较的效率,降低比较处理的时间???

#13



if (listSsq.Count != 0)
        {
            ArrayList al = new ArrayList { 1, 2, 3, 4, 5, 6};
            ArrayList alBlue = new ArrayList { 7};
            for (int i = 0; i < listSsq.Count; i++)
            {
                int countH = 0;    //统计红球中奖个数
                int countL = 0;    //统计篮球是否中奖
                if (al.Contains(listSsq[i].tb_ssq_h1))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h2))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h3))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h4))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h5))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h6))
                    countH++;
                if (alBlue.Contains(listSsq[i].tb_ssq_l1))
                    countL++;
                if (countH == 6 && countL == 1)
                {
                    y1++;
                    listSsq[i].tb_ssq_state= 2; 
                }
                else if (countH == 6 && countL == 0)
                {
                    y2++;
                    listSsq[i].tb_ssq_state = 2;
                }
                else if (countH == 5 && countL == 1)
                {
                    y3++;
                    listSsq[i].tb_ssq_state = 2;
                }
                else if ((countH == 5 && countL == 0) || (countH == 4 && countL == 1))
                {
                    y4++;
                    listSsq[i].tb_ssq_state = 2;
                }
                else if ((countH == 4 && countL == 0) || (countH == 3 && countL == 1))
                {
                    listSsq[i].tb_ssq_state = 2;
                }
                else if (countL == 1)
                {
                    listSsq[i].tb_ssq_state = 2;
                }
                else
                {
                    listSsq[i].tb_ssq_state = 1;
                } 
            }
            cpjc.SubmitChanges();
        }


提高这一部分的效率,减少比较处理时间????

#14


用SqlbulkCopy类解决

#15


这种典型的数据类型,
显然应该用数学方法直接查询得到!!!

#16


看起来像是7星彩的中将统计,
你描述下你的实际业务需求,
我看看能不能给你一个比较快的解决办法。

#17


请看我在你另一个帖子里的回复

#1


先将需要的数据取出来放在内存里面,注意只取需要用到的数据,然后在内存里比较

#2


这个需要很多方面去优化,服务器,数据库,sql语句,客户端(分页,按提条件查询)等等,慢慢来吧

#3


最基本的一个方法,先给主键和查询列添加索引

#4


引用 2 楼 bdmh 的回复:
这个需要很多方面去优化,服务器,数据库,sql语句,客户端(分页,按提条件查询)等等,慢慢来吧

++

#5


引用 4 楼 kk297173176kk 的回复:
引用 2 楼 bdmh 的回复:

这个需要很多方面去优化,服务器,数据库,sql语句,客户端(分页,按提条件查询)等等,慢慢来吧

++

差点看成是“ ”了。哈哈。

#6


添加索引 和 用多少取多少的原则

#7


在你的硬件条件目前无法改变的情况下,一般只能是从sql语句入手了,想法优化,用多少取多少(也有多种方法),前台分页是必须的,
还有楼上说的,索引了什么的.真得慢慢来,就是一下子把这些都用上了,也不一定就能好多少,把这些和你的实际情况结合起来一下.

#8


嗯,先分析sql语句,需要什么就只取什么,别太浪费!

#9


http://www.cnblogs.com/jirigala/archive/2010/11/03/1868011.html这是吉日嘎拉的数据库优化,很多人借鉴过。楼主看看。

#10


增加索引,数据库语句优化点,用sql探测工具,检查下CUP,月底,说明语句优化越好

#11


如果有主键, 主键是数字, 可以用top+not in, 否则用row_number()好点.

#12


错了,表中有100w条数据,如何提高比较的效率,降低比较处理的时间???

#13



if (listSsq.Count != 0)
        {
            ArrayList al = new ArrayList { 1, 2, 3, 4, 5, 6};
            ArrayList alBlue = new ArrayList { 7};
            for (int i = 0; i < listSsq.Count; i++)
            {
                int countH = 0;    //统计红球中奖个数
                int countL = 0;    //统计篮球是否中奖
                if (al.Contains(listSsq[i].tb_ssq_h1))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h2))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h3))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h4))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h5))
                    countH++;
                if (al.Contains(listSsq[i].tb_ssq_h6))
                    countH++;
                if (alBlue.Contains(listSsq[i].tb_ssq_l1))
                    countL++;
                if (countH == 6 && countL == 1)
                {
                    y1++;
                    listSsq[i].tb_ssq_state= 2; 
                }
                else if (countH == 6 && countL == 0)
                {
                    y2++;
                    listSsq[i].tb_ssq_state = 2;
                }
                else if (countH == 5 && countL == 1)
                {
                    y3++;
                    listSsq[i].tb_ssq_state = 2;
                }
                else if ((countH == 5 && countL == 0) || (countH == 4 && countL == 1))
                {
                    y4++;
                    listSsq[i].tb_ssq_state = 2;
                }
                else if ((countH == 4 && countL == 0) || (countH == 3 && countL == 1))
                {
                    listSsq[i].tb_ssq_state = 2;
                }
                else if (countL == 1)
                {
                    listSsq[i].tb_ssq_state = 2;
                }
                else
                {
                    listSsq[i].tb_ssq_state = 1;
                } 
            }
            cpjc.SubmitChanges();
        }


提高这一部分的效率,减少比较处理时间????

#14


用SqlbulkCopy类解决

#15


这种典型的数据类型,
显然应该用数学方法直接查询得到!!!

#16


看起来像是7星彩的中将统计,
你描述下你的实际业务需求,
我看看能不能给你一个比较快的解决办法。

#17


请看我在你另一个帖子里的回复