现在的公司数据量一般都比较大,当我们需要同此多个读数据库的操作,会出现什么样的情况呢?

String sql ="insert into info (id,name,age,card,otherinfo)values("+i+",'我是第"+i+"个',"+i%100+",'dsfs"+i+i%37+"','其他信息')";
 Mysql.add(sql);
if(i%100==0) {
   System.err.println("已插入数据"+i+"个,消耗总时间为:"+(System.currentTimeMillis()-time)+"毫秒");
}

这样写字符串拼接的话,我们用for循环去插入数据,这样的操作可能会出现线程池放不下的原因,我们会进行频繁的连接数据库,释放连接等。

那么我们要怎么进行优化呢?

long time=System.currentTimeMillis();
        for(int k=1;k<=500;k++) { 
            StringBuilder sql =new StringBuilder("insert into t_userinfo (id,name,age,card,otherinfo)values");
            int start=k*20000;
            for(int i=start;i<=start+20000;i++) {

                sql.append("(");
                sql.append(i);   
                sql.append(",'我是第");
                sql.append(i);
                sql.append("个',");
                sql.append(i%100);
                sql.append(",'dsfs");
                sql.append(i+i%37);
                sql.append("','其他信息')");
                if(i<start+20000) {
                    sql.append(",");
                }
               
            }
            MysqlUtil.add(sql.toString());    
            System.out.println("已插入数据"+(k*20000)+"个,消耗总时间为:"+(System.currentTimeMillis()-time)+"毫秒");
        }
        System.out.println("消耗总时间为:"+(System.currentTimeMillis()-time)+"毫秒");

 

我们可以利用StringBuilder进行字符串的拼接,这样我们只进行一次数据库连接和释放。

当我们原数据有400万,3个索引时,我们进行添加

千万级的数据量,我们的sql怎么优化呢?

我们会发现,我们增加的速度600w的数据量之后,增加速度变慢。

那如果我们只有一个索引呢?

千万级的数据量,我们的sql怎么优化呢?
    由此可见,我们新建的索引太多,也会对我们的增加速度有影响。

当我们用50个线程去访问我们数据,速度又如何呢?

1500w

千万级的数据量,我们的sql怎么优化呢?

 

700w

 

千万级的数据量,我们的sql怎么优化呢?

300w

千万级的数据量,我们的sql怎么优化呢?

 

可见速度变化不大,查询时间小于1s,我们还是可以接受的。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-28
猜你喜欢
  • 2021-10-09
  • 2021-10-16
  • 2021-09-12
  • 2021-12-02
  • 2022-12-23
  • 2021-11-19
  • 2021-07-12
相关资源
相似解决方案