数据库性能优化总结

1.数据库性能优化总结:

  1. 对查询进行优化,要尽可能避免全表扫描,首先应考虑where及order by涉及的列上创建索引 java

  2. 应尽可能避免在where子句中对字段进行null值判断, 不然索引失效而进行全表扫描, 例如: sql

select id from table where num is null

        最好不要给数据库留null, 尽量的使用not null填充数据库 数据库

  3.应尽可能避免在where子句中使用!= 或者<>操做符, 不然索引失效致使进行全表扫描 性能优化

  4. 应尽可能避免在 where 子句中使用 or 来链接条件,若是一个字段有索引,一个字段没有索引,将致使引擎放弃使用索引而进行全表扫描, 如:  oracle

select id from table where num=10 or name='admin'

 能够这样查询: oop

select id from table where num=10
union all
select id from table where name='admin'

 5. in 和 not in 也要慎用, 不然会致使全表扫描 如: 性能

select id from table where num in(1,2,3)

   对于连续的数值,能用between 就不要用in了 大数据

select id from table where num between 1 and 3

 6.应尽可能避免使用like, 这样会致使全表进行扫描: 优化

select id from table where name like '%abc%'

2.如何使用执行计划来决定是否须要sql优化

前面咱们提到了sql优化的常见方法, 那么究竟何时咱们须要对sql进行优化呢, 经过何种方式来对sql进行优化呢, 下面主要介绍一下执行计划, 执行计划是SQL优化的先决条件,经过执行计划能够更好的找到对SQL性能问题的定位 spa

咱们能够经过执行命令

EXPLAIN PLAN FOR SELECT * FROM TABLE;

看下执行后的结果:

解释一下几个参数:

  • Operation:当前操做的内容
  • Object_Name: 当前表为city
  • CARDINALITY:返回的记录数
  • COST: oracle计算出来的一个数值,用于说明SQL执行的代价

3.多表链接的三种方式区别(Hash join, Merge join , Nested Loop)

下面主要介绍一下这三种链接的使用场景:

  • Nested loop: 通常用在链接的表中有索引, 而且索引选择性较好的时候
  • Hash join:散列链接通常是作大数据链接时的经常使用方式, 通常用于在两个表的数据量差异很大的时候
  • Sort Merge join: 通常用于在没有索引,而且数据已经排序的状况
相关文章
相关标签/搜索