Oracle sql的基本優化寫法和思路。

首先簡單介紹下常規的sql優化的方式:sql

1.確定有人說建索引啊。緩存

2.數據量實在太大,建分區啊。oracle

3.其實基於目前公司的業務還有一種辦法那就是向上彙集表。根據查詢業務,專門抽取上來一張表,直接作到select就好。函數

4.其實還能夠把表細分,而後經過應用控制根據不一樣條件查詢不一樣表學習

 

其實,我覺着以上這些思路的前提是SQL寫法不能在優化了,不過通常狀況下sql優化下 換個寫法我覺着能解決最起碼50%的查詢慢的問題。優化

下面開始介紹平常開發寫sql須要注意的地方spa

1.得學會看執行計劃。索引

  什麼是執行計劃,執行計劃我覺着就是oracle決定如何來執行你的sql的一個過程記錄,這個東西是會被緩存的,前提是你的sql跟緩存起來的如出一轍開發

  plsql裏面F5就能夠看執行計劃了。p數學

  執行計劃的執行順序是 縮進最多最早執行,一樣縮進從上往下。

  主要看幾點就行了,是否是全表掃描,走沒走索引,基數(就是返回結果集) 耗費(就是這個過程要多久)

2.寫sql一些簡單的規範

  寫sql儘可能都大寫,還有寫表的別名,而後選擇字段都是寫別名.字段名 ,別用select * 

3.like走索引不?

  like 'abc%' 走索引    like '%abd%'不走索引

4.學會使用exists

  能夠使用exists代替in ,not exists 代替 not in

5.不要對索引列進行計算致使索引失效,也不要讓他自動轉型

6. is null 和 is not null 不走索引

7. 複合索引,是有順序的, 若是你只用了其中一個非第一個 那是沒用的

8.ORDER BY 走不走索引?

  走索引,可是有兩個限定:

   (1)ORDER BY中全部的列必須包含在相同的索引中並保持在索引中的排列順序。 

     (2)ORDER BY中全部的列必須定義爲非空

9.使用>=  代替 >

10.不走索引的其餘狀況

   (1)'!='不走索引。索引只能告訴咱們什麼存在於表中, 而不能告訴你什麼不在表中。

   (2)'||'是字符鏈接函數。就象其餘函數那樣, 停用了索引。

   (3)'+'是數學函數。和其餘數學函數同樣, 停用了索引。

   (4)相同的索引列不能互相比較,這將會啓用全表掃描。

 

 

還有不少優化的地方...只能在工做中慢慢學習。。。

相關文章
相關標籤/搜索