数据库有个表,要求编码不重复
上传数据进行逐一比对
现在数据表大了,程序就慢了
如何优化

解决方案 »

  1.   

    为何要逐一对比?

    select count(*) from [TABLE] where [COLUMN] = 'VALUE'
    判断返回的是不是0不就行了么?
      

  2.   

    为何要逐一对比?

    select count(*) from [TABLE] where [COLUMN] = 'VALUE'
    判断返回的是不是0不就行了么?
      

  3.   

                var max = 1000000;
                List<int> l =new List<int>();
                for (int i = 0; i < max; i++)
                {
                    l.Add(i+1);
                }
                var x = "";
                var u = max/2;
                var y = max % 2;
                var t = u + y;
                for (int i = 0; i < max; i=i+2)
                {
                    x += l[i].ToString()+",";
                    if (y == 0)
                    { 
                        x += l[i+1].ToString()+",";
                    }
                    else
                    {
                        if((i+1)<max)
                        x += l[t - (u - i)].ToString() + ",";
                    };
                }你看我循环走了几回
      

  4.   


    select * from [TABLE] where id in (select id from [TABLE] group by id having count(*) > 1)
      

  5.   

    为什么这里的回答都这么奇葩,难道是我理解的不对?你所谓的对比,其实就是查询,保证新录入的数据不会重复,就像有的csdn用户名已被注册,你不能使用一样。对吗?如果是这样的话。那就是你说的数据太多了,顺序查询效率太低,所以慢。那这样的话,跟你怎么写代码关系就不太大了,就一个条件(或几个)的查询,还能怎么着。你要做的是数据库的优化,表的优化,怎么做。加索引,提高查询效率。
      

  6.   

    上传数据都写在table里面是.csv有好多行
      

  7.   

    首先你将导入数据中的编码 全部提取出来,用一个SQL去查询哪些重复,然后将重复的数据处理下或者是去除掉,然后再导入。
      

  8.   

    用Linq,不过数据量大的话还是慢。
      

  9.   

    另外为什么要for循环~
    select count(1) from table
    where x=@x and y=@y and z=@z
    把要插入的字段都比较一次~
    虽然在数据库也像for循环,......
      

  10.   

    如果你用sqlserver,可以用C#给写个函数然后返回结果
    至于怎么循环还是其他的你自己多作实验,看看那个是你要的
    要不就在说清楚些
      

  11.   

    一直没上来抱歉了问题解决了
    我是根据,楼上写的方法改进的
    我把当前id进行分析,然后得出一个范围
    两边排序后在进行折半散粉,都给一个不太合适,大家都出力了写sql的不给了,我个方法根本写不了sql