关于SQL优化的一些总结

SQL优化的几点意见:


1:对查询进行优化尽量避免全表扫描。首先应该考虑在where 或者 order by 涉及到的列上添加索引。


2:尽量避免在where子句中对null值判断,否则查询会放弃走索引。


3:尽量在where子句中不使用 != 或者 <> ,否则查询会放弃索引,进行全表扫描。


4:尽量避免在where子句中使用or连接条件,这样也会放弃走索引查询(可以考虑使用union all)。


5:in 和 not in也要慎用,否则会导致全表扫描,如果in中的条件连续可以考虑between。


6:使用like模糊匹配也会导致全表扫描。
6.1:like '%F%' 这种会全表扫描,可以考虑使用 instr
6.2:like '%F' 这种可以使用reverse函数,再建立函数索引。 
例如:select * from test where reverse(owner) like reverse('%SCOTT');
6.3:like 'F%' 这种会直接走索引的。


7:尽量避免在where子句中使用表达式,这样会导致放弃走索引而进行全表扫描。
例如:
select id from t where num/2=100
应改为:
select id from t where num=100*2


8:尽量避免在where子句中使用函数操作,这样也会导致查询不走索引。


9:不要在where子句中的 = 左边使用函数操作或者表达式运算。


10:在使用索引字段作为条件时,如果该索引是复合索引,那么只有使用到复合索引的第一个字段作为条件时,才会走索引。并且尽可能的让字段顺序和索引顺序一致。


11:不要写一些没有意义的查询,如需要生成一个空表结构。


12:很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)

13:索引并不是越多越好,索引虽然可以提高select的效率,但是同时也会降低insert和update的效率。


14:并不是所有的索引对查询都有效,当索引列有大量数据重复时,sql执行不会去走索引。


15:在数据库设计时尽可能的设计为数字型,这样数据库关联查询会避免过多的开销。(字符比较会一个一个字符比较)


16:尽可能使用varchar代替char,变长字段存储空间小。


17:尽量不要使用 select * from table,需要返回什么字段就返回什么字段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值