Oracle、MySQL的分页语句和使用ThreadLocal的性能优化问题

来源:互联网 发布:优化网络工程师和seo 编辑:程序博客网 时间:2024/06/04 00:27

一、MySQL和Oracle中分页的sql语句

MySQL中:(主要利用limit关键字)

    select * from table_name limit start,size; 

Oracle:(主要利用了子查询)

    select emp_xx.* from (select rownum id,emp.* from emp where rownum < end) emp_xx where id > start ;

二、使用ThreadLocal的提高插入数据库的性能问题

今天在学习mybatis时,发现使用for循环向数据库插入20条数据的时候,发现特别的慢,将近花了20的时间。此时sqlSession的获取是如下的:

    public static SqlSession getSqlSession(){        SqlSession sqlSession = null  ;        if(sqlSession == null ){            sqlSession = sqlSessionFactory.openSession() ;        }        return sqlSession ;    }

接着,我使用了ThreadLocal了封装sqlSession

    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>() ;

获取sqlSession

    /**     * 获取sqlSession     * @return     */    public static SqlSession getSqlSession(){        SqlSession sqlSession = threadLocal.get() ;        if(sqlSession == null ){            sqlSession = sqlSessionFactory.openSession() ;            threadLocal.set(sqlSession) ;        }        return sqlSession ;    }

再次使用for循环插入20条数据,发现才用了2s。

注意:在使用ThreadLocal封装SQLSession的时,如果需要关闭sqlSession,必须调用如下方法,否则会报错。

    threadLocal.remove() ;
0 0
原创粉丝点击