| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1958 人关注过本帖
标题:关于SQL Server 2005 速度的问题,大家进来讨论一下
只看楼主 加入收藏
林中剑影
Rank: 1
来 自:广州
等 级:新手上路
帖 子:91
专家分:0
注 册:2007-11-3
收藏
 问题点数:0 回复次数:6 
关于SQL Server 2005 速度的问题,大家进来讨论一下
要测试出SQL Server 2005插入速度、更新速度,测出平均每秒的插入和更新速度,我这边测试出的数据是插入才1600多次每秒,更新只有200多次每秒。
数据库中的表是最简单的,没有建索引。
请问一下要怎么才有提高速度?我这程序还要再优化吗?
程序代码:
package sqltest;
import java.sql.*;

public class SqlSpeed {
    private final String DBDRIVE = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private final String URL = "jdbc:sqlserver://192.168.168.104:1433;DatabaseName=ATest";
    private static Connection con = null;
    private static PreparedStatement stmt = null;
    private static ResultSet rs = null;
   
   
    public void connect(){
        try{   
        
            Class.forName(DBDRIVE);
            con = DriverManager.getConnection(URL,"sa","ba123");
            System.out.println("Connect success...");
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("Connect failed...");
        }
    }
   
    public void operate(String sql){
        //int exec = 0;
        try{
            stmt = con.prepareStatement(sql);
            //exec = stmt.executeUpdate(sql);
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
        
    public void resultSql(String sql){
        try{
            stmt = con.prepareStatement(sql);
            //rs = stmt.executeQuery(sql);
            
            ResultSetMetaData md = rs.getMetaData();
            System.out.println(md.getColumnName(1)+'\t'+md.getColumnName(2)+'\t'+"  "+md.getColumnName(3));
            while(rs.next()){
                System.out.println(rs.getString(1)+'\t'+" "+rs.getString(2)+rs.getString(3));
            }
        }catch(Exception e){
            e.getMessage();
        }   
    }
   
    public static void close(){
         if (rs != null)
             try {
                 rs.close();
             } catch(Exception e) {
                 e.printStackTrace();
             }
         if (stmt != null)
             try {
                 stmt.close();
             } catch(Exception e) {
                 e.printStackTrace();
             }
         if (con != null)
             try {
                 con.close();
             } catch(Exception e) {
                 e.printStackTrace();
             }
    }
   
   
    public static void main(String args[]) throws SQLException{
        String SQL = "SELECT * FROM tableb";
        String deleteSQL = "DELETE FROM tableb where name = 'eee'";
        String insertSQL = "INSERT INTO tableb(num,name,age,score) VALUES(?,'eee',20,82)";
        
   
        SqlSpeed ss = new SqlSpeed();
        
        long begin1 = System.currentTimeMillis();   
        ss.connect();             //连接
        long time1 = System.currentTimeMillis()-begin1;
        
   
        int loop = 10000;
        
        long begin2 =System.currentTimeMillis();
        for(int i=0; i<loop; i++){
              ss.operate(insertSQL);
            stmt.setInt(1, i);
            stmt.executeUpdate();
            //stmt.addBatch();   //批量处理
            //String updateSQL = "UPDATE tableb SET age =+"+i+" where num =1";
            //插入
            // ss.operate(updateSQL);    //更新
            //if(i/8000 == 0){
            //    int[] st = stmt.executeBatch();
            //}
        }
        
        long time2 = System.currentTimeMillis() - begin2;
        System.out.println("平均每秒插入:"+(loop*1000)/time2);
   
        
   
        long begin3 = System.currentTimeMillis();
        ss.operate(deleteSQL);    //删除
        stmt.executeUpdate();
        long time3 = System.currentTimeMillis() - begin3;
        
     /*
        long begin4 = System.currentTimeMillis();
        for(int i=1; ; i++){
            String updateSQL = "UPDATE message SET age =+"+i+" where num =1";
               ss.operate(updateSQL);    //更新
            if(System.currentTimeMillis() - begin4 == 1000){
                System.out.println("更新速率="+i+"次/秒");
                break;
            }
        }
    //    */
        
        long begin5 = System.currentTimeMillis();
        //ss.resultSql(SQL);          //处理结果
        long time5 = System.currentTimeMillis()-begin5;
        
        
        
        System.out.println("连接time1="+time1 +"ms. 插入time2="+time2+"ms. 删除time3="+
                            time3+"ms. 处理结果time5="+time5+"ms.");
        
        close();  //关闭所有连接
      }
   
}
搜索更多相关主题的帖子: SQL Server 速度 
2008-08-19 21:23
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
弱弱的问下 怎么测插入和更新的速度
2008-08-20 08:29
林中剑影
Rank: 1
来 自:广州
等 级:新手上路
帖 子:91
专家分:0
注 册:2007-11-3
收藏
得分:0 
回复 2# happynight 的帖子
代码都在上面了,

好好学习,天天向上!
2008-08-21 12:27
林中剑影
Rank: 1
来 自:广州
等 级:新手上路
帖 子:91
专家分:0
注 册:2007-11-3
收藏
得分:0 
怎么都没有说话啊,随便猜一下有多快都行啊

好好学习,天天向上!
2008-08-21 12:29
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
要提高速度的话 可以把你的更新和插入SQL写成一个存储过程,这样肯定会比你单用一条一条的SQL语句要快 至于使用对象的批更新和你单条更新之间的速度差别没有试过 你测试下 望告之结果
2008-08-21 17:18
球球
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:1146
专家分:265
注 册:2005-11-28
收藏
得分:0 
你这样测每秒能操作多少条数据,有何意义?本来就存在一个并发问题.
最好是把精力放在测试一条SQL语句,一般是查询语句的上面,并来优化你的SQL语句。
SQLServer本身有个自动优化的机制,如果普通的增,删,改都要我们操心来优化,那SQLSERVER存在的意义就不大了。如果是批量操作,也可以放在数据库来完成,这样应该在程序里来批量操作要快些吧。

好累
2008-08-23 12:45
球球
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:1146
专家分:265
注 册:2005-11-28
收藏
得分:0 
这样应该比在程序里来批量操作要快些吧。

好累
2008-08-23 12:48
快速回复:关于SQL Server 2005 速度的问题,大家进来讨论一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021230 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved