sql语句优化点

1、创建索引

    在where或order by字段上使用索引。
    索引不宜过多,会增加insert和update的负担,因为会重建索引。
2、索引上避免使用计算
    效率低:
    select * from user where salary*22>11000(salary是索引列)
    效率高:
    select * from user where salary>11000/22(salary是索引列)
3、使用预编译
    把一个 SQL 预编译后产生的 PreparedStatement 对象缓存下来,下次对于同一个 SQL,可以直接使用这个缓存的 PreparedState 对象。
4、尽量多条sql压缩到一句sql
5、where代替having
    在聚合前对数据进行过滤,能够减少数据量
6、表的别名
    减少解析时间,还能增强可读性
7、union all 替换 union
    union在即使没有重复行的时候也会尝试判断、所以如果确定不存在重复行的时候,尽量使用union all
8、临时表的使用
    缓存中间结果到临时表,避免多次扫描主表,大大减少阻塞(有锁)、提高并发性能,当然也得避免频繁创建和删除临时表。
9、事务的使用
    事务中尽量少套sql语句,会造成sql锁住,资源不能释放,直到commit
10、数据量大的时候,尽量少使用游标。
11、varchar代替char
    varchar可变字长,动态增加或减少字段所占内存,节省空间
    char,字长固定不能变
12、select优化
    一般不要写select * ,写查询的具体字段
    避免where中使用 null,会导致全表扫描(可用0等代替)
    索引不要做运算
13、in和exists的使用
    表A(小表),表B(大表)
 select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引;     
 select * from A where exists(select cc from B where cc=A.cc)   效率高,用到了B表上cc列的索引。   
    相反表A(大表),表B(小表)
 select * from B where cc in (select cc from A)  效率高,用到了B表上cc列的索引;
 select * from B where exists(select cc from A where cc=B.cc)  效率低,用到了A表上cc列的索引。         
14、update语句优化
    只update需要更新的字段
15、delete语句优化
    删除重复记录:delete from emp e where e.rowid >(select min(x.rowid) from emp x where x.emp_no=e.emp_no)
16、insert into 代替 create table
    如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
    select a,c into table1 from table2

 

参考:https://blog.csdn.net/u010520146/article/details/81161762

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值