1、数据库方面
建立检索
分区
尽量使用固定长度字段
限制字段长度
2、数据库io方面
增加缓冲区
如果涉及表级联,不同的表存储在不同硬盘上,早呢更加IO速度
3、SQL语句方面
优化sql语句,减少比较次数
限制返回的数目
4、java方面
如果是反复使用的查询,使用preparestatement减少次数
-----------------------------------------------------------------
分区
create tablespace dinya_space01 datafile 'e:/demodata/dinya01.dnf' size 50M
create tablespace dinya_space02 datafile 'e:/demodata/dinya02.dnf' size 50M
create tablespace dinya_space03 datafile 'e:/demodata/dinya03.dnf' size 50M
create table dinya_test ( transaction_id number primary key, item_id number(8) not null, item_description varchar2(300), transaction_date date not null )
partition by range (transaction_id) (
partition part_01 values less than(30000000) tablespace dinya_space01,
partition part_02 values less than(60000000) tablespace dinya_space02,
partition part_03 values less than(maxvalue)tablespace dinya_space03 );
-------------------------------------------------------------------------------
preparestatement
java中JDBC中,有个预处理功能,这个功能一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入。
用法就是如下边所示:
- String sql="update cz_zj_directpayment dp"+
- "set dp.projectid = ? where dp.payid= ?";
- try {
- PreparedStatement pset_f = conn.prepareStatement(sql);
- pset_f.setString(1,inds[j]);
- pset_f.setString(2,id);
- pset_f.executeUpdate(sql_update);
- }catch(Exception e){
- //e.printStackTrace();
- logger.error(e.message());
- }
那为什么它这样处理就能预防SQL注入提高安全性呢?其实是因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库已参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了SQL注入的作用了!