數據庫性能優化總結

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: 通常用於在沒有索引,而且數據已經排序的狀況
相關文章
相關標籤/搜索